在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