从列表创建空数据帧的速度是从emptyRDD()创建的速度的x4倍



我们希望在代码中的某个位置创建一个空的DataFrame。我们发现了这个奇怪的问题。


当从空列表创建时,这会减慢我们的程序速度,并导致程序稍后的每个火花操作(例如df.write(((都慢4倍:

spark.createDataFrame([], schema)

经过大量的调试,我发现这可以解决问题:

spark.createDataFrame(spark.sparkContext.emptyRDD(), schema)


尝试查看Spark源代码,但无法得出任何结论。此外,在程序中对DataFrames执行了df.deexplain((,但计划是相同的。我唯一的想法是,第一个选项会导致与工作节点进行一些额外的通信。

有人知道为什么第一个选项比第二个慢得多吗?

spark.sparkContext.emptyRDD()创建一个没有分区的RDD,而spark.createDataFrame([], schema)创建一个至少有一个分区的DataFrame。开销是由于空分区上的任务造成的。

最新更新