我正在学习spark,当我使用以下表达式在pyspark shell中测试repartition()函数时,我观察到一个非常奇怪的结果:之后所有元素都落入同一个分区repartition()
功能。
在这里,我用了glom()
了解 rdd 内的分区。我正期待着repartition()
打乱元素并将它们随机分布在分区之间。仅当我使用新分区数
在我的测试过程中,如果我设置新的分区数 > 原始分区数,也不会观察到洗牌。我在这里做错了什么吗?
In [1]: sc.parallelize(range(20), 8).glom().collect()
Out[1]:
[[0, 1],
[2, 3],
[4, 5],
[6, 7, 8, 9],
[10, 11],
[12, 13],
[14, 15],
[16, 17, 18, 19]]
In [2]: sc.parallelize(range(20), 8).repartition(8).glom().collect()
Out[2]:
[[],
[],
[],
[],
[],
[],
[2, 3, 6, 7, 8, 9, 14, 15, 16, 17, 18, 19, 0, 1, 12, 13, 4, 5, 10, 11],
[]]
In [3]: sc.parallelize(range(20), 8).repartition(10).glom().collect()
Out[3]:
[[],
[0, 1],
[14, 15],
[10, 11],
[],
[6, 7, 8, 9],
[2, 3],
[16, 17, 18, 19],
[12, 13],
[4, 5]]
我使用的是spark版本2.1.1。