gpt4 book ai didi

apache-spark - Pyspark:重新分区与分区

转载 作者:行者123 更新时间:2023-12-03 11:27:36 35 4
gpt4 key购买 nike

我现在正在研究这两个概念,并且需要澄清。通过命令行,我一直在尝试找出差异以及开发人员何时使用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)]]

我研究了两者的实现,并且我注意到的大部分不同之处是,partitionBy可以采用分区功能,或者默认情况下使用Portable_hash。因此,在partitionBy中,所有相同的键应位于同一分区中。在重新分区中,我希望这些值能在分区上更均匀地分布,但事实并非如此。

鉴于此,为什么有人会使用分区?我想我唯一能看到它被使用的情况是,如果我不使用PairRDD,或者我有很大的数据偏斜?

有什么我想念的东西,还是有人可以从另一个 Angular 为我照亮?

最佳答案

repartition已存在于RDD中,并且不按键(或按除Ordering之外的任何其他条件)处理分区。现在,PairRDD添加了键的概念,并随后添加了另一种允许按该键进行分区的方法。

因此,是的,如果您的数据是键控的,则应绝对按该键进行分区,这在许多情况下是首先使用PairRDD的要点(用于联接,reduceByKey等)。

关于apache-spark - Pyspark:重新分区与分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33831561/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com