[英]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))
您可以使用groupByKey
, collectAsMap
和map
来实现此目标,如下所示
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.