1

Pythonでelasticsearch-hadoopコネクタを使用してElasticsearchからデータをロードすることにより、Spark RDDを作成しています(pysparkのインポート):

es_cluster_read_conf = {
    "es.nodes" : "XXX",
    "es.port" : "XXX",
    "es.resource" : "XXX"
}

es_cluster_rdd = sc.newAPIHadoopRDD(
        inputFormatClass="org.elasticsearch.hadoop.mr.EsInputFormat",
        keyClass="org.apache.hadoop.io.NullWritable", 
        valueClass="org.elasticsearch.hadoop.mr.LinkedMapWritable", 
        conf=es_cluster_read_conf)

ここで、ファイルにこれら 2 つのコマンドのみを含めて実行すると、Spark Web UI for Application Details で次のように表示されます。take at SerDeUtil.scala:201

2 つの質問があります。

1) 私は、Spark では RDD が遅延して計算されるという印象を受けました。つまり、アクションが適用されない場合、ジョブは起動されません。上記のシナリオでは、アクションを適用していませんが、ジョブが Web UI で実行されているように見えます。

2) これがジョブである場合、この"take"操作は実際には何を意味しますか? これは、データが実際に ElasticSearch ノードからロードされ、Spark ノードに渡されるということですか? 一部のジョブは収集、カウントなどとしてリストされていると理解しています。これらは Spark で有効なアクションだからです。takeしかし、広範な調査を行った後でも、この操作のセマンティクスを理解できませんでした。

4

1 に答える 1