【问题标题】:Spark dataframe select operation and number of partitionsSpark数据框选择操作和分区数
【发布时间】:2017-04-23 01:12:26
【问题描述】:

我使用的是 Spark 1.5.0

我正在进行广播连接,因为我的一个数据帧大约 30 GB (large_df),另一个大约 10 MB (small_df)。这是我的代码。

 df1 = large_df.join(broadcast(small_df), large_df("col2") === small_df("s_col2")

在此之后,如果我得到 df1 的分区数,我会看到正确的数字 (1000)

 df1.rdd.partitions.size() 1000

现在我正在做一个项目,只选择 df1 的某些列

 df2 = df1.select("col2", "col4", "col6", "col8")

紧接着,如果我得到 df1 的分区数,我会看到一个较小的数字 (200)。我不确定是这个选择还是其他一些操作以某种方式改变了我的数据帧的分区数。

 df2.rdd.partitions.size() 200

如何确保不减少分区数。

【问题讨论】:

    标签: apache-spark apache-spark-sql spark-dataframe


    【解决方案1】:

    您可以将 SparkConf 的以下属性设置为 1000

    spark.sql.shuffle.partitions
    

    更多信息在这里:https://spark.apache.org/docs/1.2.0/sql-programming-guide.html

    spark.sql.shuffle.partitions 
    Default: 200   
    Configures the number of partitions to use when shuffling data for joins or aggregations.
    

    【讨论】:

      【解决方案2】:

      val df = Seq( ("A", 1), ("B", 2), ("A", 3), ("C", 1) ).toDF("k", "v")

      df.rdd.getNumPartitions

      当您对数据帧进行混洗操作时,默认分区为 200

      val partitioned = df.repartition($"k")

      partitioned.rdd.getNumPartitions //结果 200

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-09
        • 1970-01-01
        • 2017-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-31
        • 1970-01-01
        相关资源
        最近更新 更多