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
しかし、広範な調査を行った後でも、この操作のセマンティクスを理解できませんでした。