在pySpark中将RDD拆分为n个部分

Posted

技术标签:

【中文标题】在pySpark中将RDD拆分为n个部分【英文标题】:Split RDD into n parts in pySpark 【发布时间】:2016-03-29 10:02:41 【问题描述】:

我想使用 Pyspark 将一个 RDD 分成 n 个等长的部分

如果 RDD 类似于

data = range(0,20)
d_rdd = sc.parallelize(data)
d_rdd.glom().collect()
[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]]

我想将任意两个随机数组合在一起,比如

[[0,4],[6,11],[5,18],[3,14],[17,9],[12,8],[2,10],[1,15],[13,19],[7,16]]

【问题讨论】:

【参考方案1】:

两种方法:

使用parallelize时设置分区数,并使用函数distinct()

data = range(0,20)
d_rdd = sc.parallelize(data, 10).distinct()
d_rdd.glom().collect()

使用 repartition()distinct()

data = range(0,20)
d_rdd = sc.parallelize(data).repartition(10).distinct()
d_rdd.glom().collect()

【讨论】:

感谢您的回答。我尝试了同样的方法,在我看来,我没有得到确切的分区数量。 o/p 类似于 [[18, 19], [0, 1], [12, 13], [8, 9], [], [6, 7, 16, 17], [2, 3], [14, 15], [10, 11], [4, 5]] 如果你能看到,有一个分区有四个元素,一个分区没有元素。是否可以使用 partitionBy 来获得所需的结果。 添加 distinct() 并试一试

以上是关于在pySpark中将RDD拆分为n个部分的主要内容,如果未能解决你的问题,请参考以下文章

使用 Pyspark 从单词列表的行条目创建元组并使用 RDD 计数

在 Pyspark 中将流水线 RDD 转换为 Dataframe [重复]

在 PySpark 中将 Python Dict 转换为稀疏 RDD 或 DF

如何在pyspark中将rdd行转换为带有json结构的数据框?

研究 RDD-pyspark 的不同元素

如何在 Pyspark 中将 Pair RDD Tuple 键转换为字符串键? [关闭]