当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python PySpark RDD repartition方法用法及代码示例


PySpark RDD 的repartition(~) 方法将 RDD 拆分为指定数量的分区。

注意

当我们第一次创建 RDD 时,它们已经在底层进行了分区,这意味着所有 RDD 都已经分区了。此方法称为 repartition(~) (重点是 re ),因为我们正在更改现有分区。

参数

1. numPartitions | int

用于拆分 RDD 的分区数。

返回值

PySpark RDD (pyspark.rdd.RDD)。

例子

将 RDD 重新分区为一定数量的分区

考虑以下 RDD:

rdd = sc.parallelize(["A","B","C","A","A","B"], numSlices=3)
rdd.collect()



['A', 'B', 'C', 'A', 'A', 'B']

在这里,我们使用 parallelize(~) 方法创建一个具有3个分区的RDD。

我们可以使用 glom() 方法来查看分区的实际内容:

rdd.glom().collect()



[['A', 'B'], ['C', 'A'], ['A', 'B']]

将 RDD 重新分区为 2 个分区:

new_rdd = rdd.repartition(2)
new_rdd.glom().collect()



[['A', 'B', 'A', 'B'], ['C', 'A']]

请注意,即使我们重新分区 RDD:

  • 相同的值不一定会出现在同一个分区中('A' 可以在两个分区中找到)

  • 每个分区中的元素数量也可能不平衡 - 这里我们第一个分区中有 4 个元素,而第二个分区中只有 2 个元素。

警告

repartition(~) 方法涉及混洗,即使减少分区数量也是如此。为了避免减少分区数量时出现混洗,请改用 RDD 的 coalesce(~) 方法。

相关用法


注:本文由纯净天空筛选整理自Isshin Inada大神的英文原创作品 PySpark RDD | repartition method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。