【问题标题】:Preserving the number of partitions of a Spark dataframe after transformation转换后保留 Spark 数据帧的分区数
【发布时间】:2018-02-21 06:17:27
【问题描述】:

我正在查看代码中的一个错误,其中数据帧被分成了比预期多的分区(超过 700 个),当我尝试将它们重新分区为 48 时,这会导致过多的随机播放操作。我不能在这里使用 coalesce() 是因为我希望在进行重新分区之前首先拥有更少的分区。

我正在寻找减少分区数量的方法。假设我有一个分为 10 个分区的 spark 数据框(具有多列)。我需要根据其中一列进行 orderBy 转换。完成此操作后,生成的数据帧是否会具有相同数量的分区?如果没有,spark 将如何决定分区的数量?

除了像 repartition() 这样明显的转换之外,我还需要注意哪些其他转换可能会导致数据帧的分区数量发生变化?

【问题讨论】:

    标签: apache-spark apache-spark-sql partitioning data-partitioning


    【解决方案1】:

    需要交换的操作的分区数由spark.sql.shuffle.partitions 定义。如果你想要一个特定的值,你应该在执行命令之前设置它:

    scala> val df = spark.range(0, 1000)
    df: org.apache.spark.sql.Dataset[Long] = [id: bigint]
    
    scala> spark.conf.set("spark.sql.shuffle.partitions", 1)
    
    scala> df.orderBy("id").rdd.getNumPartitions
    res1: Int = 1
    
    scala> spark.conf.set("spark.sql.shuffle.partitions", 42)
    
    scala> df.orderBy("id").rdd.getNumPartitions
    res3: Int = 42       
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多