Scala 减少地图的rdd

Scala 减少地图的rdd,scala,apache-spark,Scala,Apache Spark,我已经和rdd一样: Map(A -> Map(A1 -> 1)) Map(A -> Map(A2 -> 2)) Map(A -> Map(A3 -> 3)) Map(B -> Map(B1 -> 4)) Map(B -> Map(B2 -> 5)) Map(B -> Map(B3 -> 6)) Map(C -> Map(C1 -> 7)) Map(C -> Map(C2 -> 8)) Map(C -

我已经和rdd一样:

Map(A -> Map(A1 -> 1))
Map(A -> Map(A2 -> 2))
Map(A -> Map(A3 -> 3))
Map(B -> Map(B1 -> 4))
Map(B -> Map(B2 -> 5))
Map(B -> Map(B3 -> 6))
Map(C -> Map(C1 -> 7))
Map(C -> Map(C2 -> 8))
Map(C -> Map(C3 -> 9))
我需要按键减少相同的rdd,并具有与以前相同的值:

Map(A -> Map(A1 -> 1, A2 -> 2, A3 -> 3))
Map(B -> Map(B1 -> 4, B2 -> 5, B3 -> 6))
Map(C -> Map(C1 -> 7, C2 -> 8, C3 -> 9))
我试着减少:

val prueba = replacements_2.reduce((x,y) => x ++ y)
但仅保留使用相同键计算的最后一个元素的值:

(A,Map(A3 -> 3))
(C,Map(C3 -> 9))
(B,Map(B3 -> 6))

我认为您应该以不同的方式对数据建模,您的
Map
方法似乎有点笨拙。为什么用带有1个元素的
映射表示1个条目?一个
Tuple2
更适合这个。。。无论如何,您需要
reduceByKey
。为此,首先需要将rdd转换为键值rdd:

rdd
  .map(m => (m.keys.head,m.values.head)) // create key-value RDD
  .reduceByKey((a,b) => a++b) // merge maps
  .map{case (k,v) => Map(k -> v)} // create Map again

你能告诉我你试过什么,为什么不起作用吗?完成了!看一看!