Преобразовать СДР [(K, V) в Карту [K, Список [V]] - PullRequest
0 голосов
/ 13 июня 2018

Как я могу преобразовать СДР tuple2 (Ключ, Значение) с дубликатами Ключей в Карту [K, Список [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)))

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Вы можете использовать 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))
0 голосов
/ 13 июня 2018

Просто используйте 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))
...