PySpark Join改组了共同分区的RDD

Def_Os
from pyspark import SparkContext

sc = SparkContext()

rdd1 = sc.parallelize([('a', 1), ('b', 2), ('c', 3), ('d', 4)], numSlices=8)
rdd2 = rdd1.mapValues(lambda x: x)

这些RDD具有相同的分区:

rdd1.keys().glom().collect()
>>> [[], ['a'], [], ['b'], [], ['c'], [], ['d']]

rdd2.keys().glom().collect()
>>> [[], ['a'], [], ['b'], [], ['c'], [], ['d']]

在SO上有多个答案,这表明加入共分区数据不会引起洗牌,这对我来说很有意义。示例:联合分区的RDD的联接是否会导致Apache Spark改组?

但是,当我使用PySpark加入这些共同分区的RDD时,数据会重新整理到一个新的分区中:

rdd1.join(rdd2).keys().glom().collect()
>>> [['a'], [], ['c'], ['b'], [], ['d'], [], [], [], [], [], [], [], [], [], []]

即使我将新分区的数量设置为原来的8个,分区也会发生变化:

rdd1.join(rdd2, numPartitions=8).keys().glom().collect()
>>> [['a'], [], ['c'], ['b'], [], ['d'], [], []]

为什么我无法避免使用这些共分区的RDD进行混洗?

我正在使用Spark 1.6.0。

零323

在这种情况下,既不分区rdd1也不rdd2分区

rdd1 = sc.parallelize([('a', 1), ('b', 2), ('c', 3), ('d', 4)])
rdd2 = rdd1.mapValues(lambda x: x)

rdd1.partitioner is None
## True

rdd2.partitioner is None
# True

因此,根据定义,不存在共分区。虽然可以对数据进行分区并加入:

n = rdd1.getNumPartitions()
rdd1part = rdd1.partitionBy(n)
rdd2part = rdd2.partitionBy(n)

rdd1part.join(rdd2part)  # rdd1part and rdd2part are co-partitioned

这只会重新排列DAG,而不会阻止随机播放。

另请参见Spark中的默认分区方案

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

共同分区的RDD联接是否会导致Apache Spark改组?

来自分类Dev

在pyspark RDD上显示分区

来自分类Dev

PySpark重新分区RDD元素

来自分类Dev

在Pyspark的RDD分区中拆分数组

来自分类Dev

Pyspark:重新分区与分区

来自分类Dev

Pyspark分区最多

来自分类Dev

Pyspark 重新分区行为

来自分类Dev

Pyspark RDD的平均间隔

来自分类Dev

pyspark rdd拆分问题

来自分类Dev

在PySpark中转换RDD

来自分类Dev

pyspark RDD 到 DataFrame

来自分类Dev

如何在pyspark中查看RDD中每个分区的内容?

来自分类Dev

计算每个pyspark RDD分区中的元素数

来自分类Dev

如何在pyspark中查看RDD中每个分区的内容?

来自分类Dev

pyspark使用partitionby分区数据

来自分类Dev

获取pyspark中的分区数

来自分类Dev

PySpark:在RDD中使用对象

来自分类Dev

Pyspark RDD:查找元素的索引

来自分类Dev

pyspark:仅基于rdd的操作

来自分类Dev

在 PySpark / Python RDD 中过滤

来自分类Dev

在scala中将两个RDD共同分组

来自分类Dev

如何从pyspark rdd或分区确定原始的s3输入文件名

来自分类Dev

如何从pyspark rdd或分区确定原始的s3输入文件名

来自分类Dev

Spark 2.0读取csv分区数(PySpark)

来自分类Dev

Pyspark木地板-分区后排序

来自分类Dev

windowPartitionBy并在pyspark中重新分区

来自分类Dev

Pyspark 中的自定义分区

来自分类Dev

将numpy矩阵转换为pyspark rdd

来自分类Dev

pyspark:将DataFrame转换为RDD [string]