Spark数据帧选择操作和分区数

时间:2016-09-09 02:22:51

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

我正在使用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

如何确保分区数量不会减少。

2 个答案:

答案 0 :(得分:0)

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

spark.sql.shuffle.partitions

此处有更多信息:here

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

答案 1 :(得分:0)

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