星火网UI"take at SerDeUtil.scala:201"解读

Spark Web UI "take at SerDeUtil.scala:201" interpretation

我正在创建一个 Spark RDD,方法是使用 python 中的 elasticsearch-hadoop 连接器从 Elasticsearch 加载数据(导入 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 上的应用程序详细信息中,我在工作中看到的是:take at SerDeUtil.scala:201

我现在有两个问题:

1) 我的印象是,在 Spark 中,RDD 是延迟计算的,即,如果不应用任何操作,就不会启动任何作业。在上述情况下,我没有应用任何操作,但我在网络上看到一份工作 运行 UI.

2) 如果这是一项工作,那么这个"take"操作究竟意味着什么?这是否意味着数据实际上是从我的 ElasticSearch 节点加载并传递给 Spark 节点的?我理解一些作业被列为收集、计数等,因为这些是 Spark 中的有效操作。然而,即使在进行了广泛的研究之后,我仍然无法弄清楚这个 take 操作的语义。

I was under the impression that in Spark RDDs are computed lazily i.e, if no action is applied, there would not be any job launched. I

这或多或少是正确的,尽管当操作可以由次要任务触发时存在一些例外情况,例如创建分区程序、JVM 和来宾语言之间的数据转换。当您使用高级别 Dataset API 和 Dataframes.

时,情况会更加复杂

If this is a job, what does this "take" operation actually mean? Does this mean that the data is actually loaded from my ElasticSearch node and passed to Spark node?

这是一项工作,一些数据实际上是从源中获取的。需要确定键值对的序列化器。