簡體   English   中英

將RDD [(K,V)轉換為Map [K,List [V]]

[英]Convert RDD[(K,V) to Map[K,List[V]]

如何將具有重復鍵的tuple2(鍵,值)的RDD轉換為Map [K,List [V]]?

輸入示例:

val list = List((1,a),(1,b),(2,c),(2,d))
val rdd = sparkContext.parallelize(list)

預期輸出:

Map((1,List(a,b)),(2,List(c,d)))

只需使用groupByKey ,然后使用groupByKey collectAsMap

val rdd = sc.parallelize(List((1,"a"),(1,"b"),(2,"c"),(2,"d")))

rdd.groupByKey.collectAsMap
// res1: scala.collection.Map[Int,Iterable[String]] =
//   Map(2 -> CompactBuffer(c, d), 1 -> CompactBuffer(a, b))

或者,使用map/reduceByKey然后collectAsMap

rdd.map{ case (k, v) => (k, Seq(v)) }.reduceByKey(_ ++ _).
  collectAsMap
// res2: scala.collection.Map[Int,Seq[String]] =
//   Map(2 -> List(c, d), 1 -> List(a, b))

您可以使用groupByKeycollectAsMapmap來實現此目標,如下所示

val rdd = sc.parallelize(List((1,"a"),(1,"b"),(2,"c"),(2,"d")))
val map=rdd.groupByKey.collectAsMap.map(x=>(x._1,x._2.toList))

樣本輸出:

Map(2 -> List(c, d), 1 -> List(a, b))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM