Scala 在PAIRDD/a映射数据结构上运行sum,直到达到阈值

Scala 在PAIRDD/a映射数据结构上运行sum,直到达到阈值,scala,apache-spark,hashmap,rdd,Scala,Apache Spark,Hashmap,Rdd,我有一个数据集,我从中创建了一个pairdd[K,V] v=每个键下的数据点数)] (dr5n,108) (dr5r4,67) (DR5R51163) (DR5R6121) (DR5R71103) (dr5rb,93) (dr5re8,11) (DR5RE9190) (dr5reb,26) (dr5rec,38088) (dr5red,36713) (dr5ree,47316) (dr5ref,131353) (dr5reg,121227) (dr5reh,264) (dr5rej,163) (

我有一个数据集,我从中创建了一个
pairdd[K,V]

v=每个键下的数据点数)]

(dr5n,108)
(dr5r4,67)
(DR5R51163)
(DR5R6121)
(DR5R71103)
(dr5rb,93)
(dr5re8,11)
(DR5RE9190)
(dr5reb,26)
(dr5rec,38088)
(dr5red,36713)
(dr5ree,47316)
(dr5ref,131353)
(dr5reg,121227)
(dr5reh,264)
(dr5rej,163)
(dr5rek,163)
(dr5rem,229)

我需要将每个键分配给一个RDD分区,在这个阶段之后,我
zipWithIndex
这个RDD的键

val partitioner = loadTree.coalesce(1).sortByKey().keys.zipWithIndex
(dr5n,0)
(dr5r4,1)
(dr5r5,2)
(dr5r6,3)
(dr5r7,4)
(dr5rb,5)
(dr5re8,6)
(dr5re9,7)
(dr5reb,8)
(dr5rec,9)
(dr5red,10)
(dr5ree,11)
(dr5ref,12)
(dr5reg,13)
(dr5reh,14)
(dr5rej,15)
(dr5rek,16)
(dr5rem,17)

但为了在每个分区中获得更好的负载分布,我需要从键1开始(按排序顺序)遍历值,并计算值的运行和,直到阈值值,并将所有键设置为相同的值(在本例中,分区号从0开始)

比如说,阈值=10000,那么

(dr5n,0)
(dr5r4,0)
(dr5r5,0)
(dr5r6,0)
(dr5r7,0)
(dr5rb,0)
(dr5re8,0)
(dr5re9,0)
(dr5reb,0)

(dr5rec,1)

(dr5red,2)

(dr5ree,3)

(dr5ref,4)

(dr5reg,5)

(dr5reh,6)
(dr5rej,6)
(dr5rek,6)
(dr5rem,6)

我尝试创建一个新的地图,创建一组可以分组并插入到新地图中的关键点


有没有什么专家方法可以达到同样的效果?谢谢

只做
RDD.repartition(newPartitionCount)
不是更简单吗?
val partitioner = loadTree.coalesce(1).sortByKey().keys.zipWithIndex