我有这个prbolem,我有这种RDD [(String,Array [String])之一,我想从中提取RDD [Array [String]],其中包含按键分组的值:
e.g:
val x :RDD[(String, Array[String]) =
RDD[(a, Array[ "ra", "re", "ri"]),
(a, Array[ "ta", "te", "ti"]),
(b, Array[ "pa", "pe", "pi"])]
我想得到:
val result: RDD[(String, RDD[Array[String]]) =
RDD[(a, RDD[Array[("ra", "re", "ri"),( "ta", "te", "ti")]]),
(b, RDD[Array[("pa", "pe", "pi"),...]])
,...]
答案 0 :(得分:1)
简单的reduceByKey
应解决您的问题
x.reduceByKey((prev, next)=> (prev ++ next))
答案 1 :(得分:1)
据我所知,Spark不支持嵌套RDD(请参阅此StackOverflow discussion)。
如果嵌套数组适合您的需要,简单的groupByKey
将执行:
val x = sc.parallelize(Seq(
("a", Array( "ra", "re", "ri" )),
("a", Array( "ta", "te", "ti" )),
("b", Array( "pa", "pe", "pi" ))
))
val x2 = x.groupByKey
x2.collect.foreach(println)
(a,CompactBuffer([Ljava.lang.String;@75043e31, [Ljava.lang.String;@18656538))
(b,CompactBuffer([Ljava.lang.String;@2cf30d2e))
x2.collect.foreach{ case (a, b) => println(a + ": " + b.map(_.mkString(" "))) }
a: List(ra re ri, ta te ti)
b: List(pa pe pi)