2017-07-27 31 views
0

我有一个RDD形式元组(key,HashMap[Int, Set(String)])我要转换到一个新的RDD乙(key, HashMap[Int, Set(String))其中后者RDD具有独特的键和用于每个键ķ值一个HashMap是联盟所有集合的密钥kRDD AReduceByKey用于基于RDD

例如,

RDD一个

(1,{1->Set(3,5)}), (2,{3->Set(5,6)}), (1,{1->Set(3,4), 7->Set(10, 11)}) 

将转换为

RDD乙

(1, {1->Set(3,4,5), 7->Set(10,11)}), (2, {3->Set(5,6)}) 

我不能制定一个函数f或者这在斯卡拉,因为我是新的语言。任何帮助,将不胜感激。

在此先感谢。

回答

0

catsSemigroup在这里会非常适合。添加

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