我对spark如何在spark数据帧中创建分区感到困惑。以下是步骤列表和分区大小
i_df = sqlContext.read.json("json files") // num partitions returned is 4, total records 7000
p_df = sqlContext.read.format("csv").Other options // num partitions returned is 4 , total records: 120k
j_df = i_df.join(p_df, i_df.productId == p_df.product_id) // total records 7000, but num of partitions is 200
前两个数据帧有4个分区,但只要我加入它们就会显示200个分区。我原以为它会在加入后制作4个分区,但为什么它会显示200个分区。
我在本地运行它 conf.setIfMissing(“spark.master”,“local [4]”)
答案 0 :(得分:4)
200是默认的随机分区大小。您可以通过设置spark.sql.shuffle.partitions
答案 1 :(得分:0)
当您加入时,数据将在各个分区之间乱序排列,因此在这种情况下,默认分区号(spark.sql.shuffle.partitions)将优先于实际分区数。 您可以使用重新分区或合并来调整分区。
也不要忘记使用glom()来查看您的数据是否均匀分布。如果您需要语法或其他更多信息,请告诉我。