我通过使用 python 中的 elasticsearch-hadoop 连接器(导入 pyspark)从 Elasticsearch 加载数据来创建 Spark RDD:
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 上的应用程序详细信息中,我会在工作中看到:take at SerDeUtil.scala:201
我现在有两个问题:
1)我的印象是,在 Spark RDD 中是惰性计算的,即,如果没有应用任何操作,则不会启动任何作业。在上述场景中,我没有应用任何操作,但我看到一个作业正在 Web UI 上运行。
2)如果这是一个工作,这个"take"
操作实际上意味着什么?这是否意味着数据实际上是从我的 ElasticSearch 节点加载并传递给 Spark 节点的?我理解一些工作被列为收集、计数等,因为这些是 Spark 中的有效操作。然而,即使经过大量研究,我仍然无法弄清楚这个take
操作的语义。