小编Joe*_*den的帖子

Pyspark:重新分区vs partitionBy

我现在正在研究这两个概念,并希望有一些清晰度.通过命令行,我一直在尝试识别差异,以及开发人员何时使用repartition vs partitionBy.

以下是一些示例代码:

rdd = sc.parallelize([('a', 1), ('a', 2), ('b', 1), ('b', 3), ('c',1), ('ef',5)])
rdd1 = rdd.repartition(4)
rdd2 = rdd.partitionBy(4)

rdd1.glom().collect()
[[('b', 1), ('ef', 5)], [], [], [('a', 1), ('a', 2), ('b', 3), ('c', 1)]]

rdd2.glom().collect()
[[('a', 1), ('a', 2)], [], [('c', 1)], [('b', 1), ('b', 3), ('ef', 5)]]
Run Code Online (Sandbox Code Playgroud)

我看了两者的实现,我注意到的唯一区别是partitionBy可以采用分区功能,或者默认情况下使用portable_hash.所以在partitionBy中,所有相同的键应该在同一个分区中.在重新分区中,我希望值在分区上更均匀地分布,但事实并非如此.

鉴于此,为什么有人会使用重新分配?我想我唯一能看到它被使用的是我是不是在使用PairRDD,或者我有大数据偏差?

有什么东西我不知道,还是有人可以从不同的角度为我揭开光芒?

apache-spark pyspark

23
推荐指数
2
解决办法
4万
查看次数

标签 统计

apache-spark ×1

pyspark ×1