我有一个形式为元组(key,HashMap[Int, Set(String)])
的 RDD A ,我想将其转换为新的 RDD B (key, HashMap[Int, Set(String))
,其中后者为RDD具有唯一键,每个键 k 的值为 RD 中 k 的所有集合的联合。
例如,
RDD A
(1,{1->Set(3,5)}), (2,{3->Set(5,6)}), (1,{1->Set(3,4), 7->Set(10, 11)})
将转换为
RDD B
(1, {1->Set(3,4,5), 7->Set(10,11)}), (2, {3->Set(5,6)})
我无法在Scala中为此配置函数,因为我不熟悉该语言。任何帮助将不胜感激。
提前致谢。
答案 0 :(得分:0)
cats
Semigroup
非常适合这里。添加
spark.jars.packages org.typelevel:cats_2.11:0.9.0
配置并使用combine
方法:
import cats.implicits._
val rdd = sc.parallelize(Seq(
(1, Map(1 -> Set(3,5))),
(2, Map(3 -> Set(5,6))),
(1, Map(1 -> Set(3,4), 7 -> Set(10, 11)))
rdd.reduceByKey(_ combine _)