如何获取数据集中的分区数?
how to get the number of partitions in a dataset?
我知道有很多相同的问题,但 none 确实回答了我的问题。
我有场景数据。
val data_codes = Seq("con_dist_1","con_dist_2","con_dist_3","con_dist_4","con_dist_5")
val codes = data_codes.toDF("item_code")
val partitioned_codes = codes.repartition($"item_code")
println( "getNumPartitions : " + partitioned_codes.rdd.getNumPartitions);
输出:
getNumPartitions : 200
它应该给 5,为什么给 200?我哪里做错了,如何解决?
因为200是spark.sql.shuffle.partitions
的标准值,适用于df.repartition
。来自文档:
Returns a new Dataset partitioned by the given partitioning
expressions, using spark.sql.shuffle.partitions as number of
partitions. The resulting Dataset is hash partitioned.
分区数与数据框中(不同的)值的数量无关。重新分区确保所有具有相同键的记录都在同一个分区中,没有别的。所以在你的情况下,可能所有记录都在 1 个分区中,而 199 个分区是空的
即使您这样做 codes.repartition($"item_code",5)
,也不能保证您有 5 个大小相同的分区。据我所知,你不能在数据帧 API 中这样做,也许在带有自定义分区程序的 RDD 中
我知道有很多相同的问题,但 none 确实回答了我的问题。
我有场景数据。
val data_codes = Seq("con_dist_1","con_dist_2","con_dist_3","con_dist_4","con_dist_5")
val codes = data_codes.toDF("item_code")
val partitioned_codes = codes.repartition($"item_code")
println( "getNumPartitions : " + partitioned_codes.rdd.getNumPartitions);
输出:
getNumPartitions : 200
它应该给 5,为什么给 200?我哪里做错了,如何解决?
因为200是spark.sql.shuffle.partitions
的标准值,适用于df.repartition
。来自文档:
Returns a new Dataset partitioned by the given partitioning expressions, using spark.sql.shuffle.partitions as number of partitions. The resulting Dataset is hash partitioned.
分区数与数据框中(不同的)值的数量无关。重新分区确保所有具有相同键的记录都在同一个分区中,没有别的。所以在你的情况下,可能所有记录都在 1 个分区中,而 199 个分区是空的
即使您这样做 codes.repartition($"item_code",5)
,也不能保证您有 5 个大小相同的分区。据我所知,你不能在数据帧 API 中这样做,也许在带有自定义分区程序的 RDD 中