我正在使用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
如何确保分区数量不会减少。
答案 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