【问题标题】:Create Empty DataFrame from list is x4 times slower than from emptyRDD()从列表创建空 DataFrame 比从 emptyRDD() 慢 x4 倍
【发布时间】:2020-12-01 03:46:23
【问题描述】:

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


从空列表创建时,这会减慢我们的程序,并导致程序中稍后的每个 spark 操作(例如 df.write())慢 4 倍:

spark.createDataFrame([], schema)

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

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


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

有谁知道为什么第一个选项比第二个慢很多?

【问题讨论】:

  • 为什么要收藏?不明智
  • @thebluephantom 我的意思是导致收集(写入/显示等)的每个操作都慢得多。对不起,我会编辑问题

标签: apache-spark pyspark apache-spark-sql


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 2015-03-09
    • 1970-01-01
    • 2019-08-31
    • 1970-01-01
    相关资源
    最近更新 更多