将RDD划分为每个分区中元素数量固定的分区
Posted
技术标签:
【中文标题】将RDD划分为每个分区中元素数量固定的分区【英文标题】:Divide the RDD into partitions with fixed number of elements in each partition 【发布时间】:2017-04-01 18:48:01 【问题描述】:在 Apache Spark 中,
repartition(n)
- 允许将 RDD 完全划分为 n
分区。
但是如何将给定的 RDD 划分为多个分区,以使所有分区(最后一个分区除外)都具有指定数量的元素。鉴于 RDD 中的元素数量未知,并且执行 .count()
的成本很高。
C = sc.parallelize([x for x in range(10)],2)
Let's say internally, C = [[0,1,2,3,4,5], [6,7,8,9]]
C = someCode(3)
预期:
C = [[0,1,2], [3,4,5], [6, 7, 8], [9]]
【问题讨论】:
【参考方案1】:在 pyspark 中很容易:
C = sc.parallelize([x for x in range(10)],2)
rdd = C.map(lambda x : (x, x))
C_repartitioned = rdd.partitionBy(4,lambda x: int( x *4/11)).map(lambda x: x[0]).glom().collect()
C_repartitioned
[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]]
这称为自定义分区。 更多信息:http://sparkdatasourceapi.blogspot.ru/2016/10/patitioning-in-spark-writing-custom.html
http://baahu.in/spark-custom-partitioner-java-example/
【讨论】:
以上是关于将RDD划分为每个分区中元素数量固定的分区的主要内容,如果未能解决你的问题,请参考以下文章