基于HashMap的RDD的ReduceByKey

时间:2017-07-27 11:03:23

标签: scala apache-spark

我有一个形式为元组(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中为此配置函数,因为我不熟悉该语言。任何帮助将不胜感激。

提前致谢。

1 个答案:

答案 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 _)