根据pyspark文档,
如果
顺便说一下,我正在使用Python版本2.7.15和Spark版本2.0.2。
repartition
应该使用哈希分区,这会导致分区大小略有不同。然而,我发现在limit
之前使用它将产生完全相等的分区大小。可以通过在pyspark shell中运行以下命令来展示:df = spark.createDataFrame([range(5)] * 100)
def count_part_size(part_iter):
yield len(list(part_iter))
print(df.repartition(20).rdd.mapPartitions(count_part_size).collect())
# [4, 4, 4, 5, 4, 4, 5, 4, 5, 6, 6, 6, 7, 5, 5, 5, 5, 6, 5, 5]
print(df.limit(100).repartition(20).rdd.mapPartitions(count_part_size).collect())
# [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]
如果
repartition
使用哈希分区器,为什么会在这种情况下产生完全相等的分区大小?如果它没有使用哈希分区器,那么它使用的是什么类型的分区器?顺便说一下,我正在使用Python版本2.7.15和Spark版本2.0.2。