Spark - 加入2个PairRDD元素

时间:2014-11-18 11:09:16

标签: hadoop bigdata apache-spark

你有一个带有2个元素的JavaRDDPair:

("TypeA", List<jsonTypeA>),

("TypeB", List<jsonTypeB>)

我需要将2对组合成1对类型:

("TypeA_B", List<jsonCombinedAPlusB>)

我需要将2个列表合并为1个列表,其中每个2个jsons(1个A类型和1个B类型)都有一些我可以加入的公共字段。

考虑到类型A的列表明显小于另一个,并且连接应该是内部的,因此结果列表应该与类型A的列表一样小。

最有效的方法是什么?

1 个答案:

答案 0 :(得分:2)

rdd.join(otherRdd)为您提供第一个rdd的内部联接。要使用它,您需要将两个RDD转换为一个PairRDD,它具有您将要加入的公共属性作为关键字。 这样的事情(例如,未经测试):

val rddAKeyed = rddA.keyBy{case (k,v) => key(v)}
val rddBKeyed = rddB.keyBy{case (k,v) => key(v)}

val joined = rddAKeyed.join(rddBKeyed).map{case (k,(json1,json2)) => (newK, merge(json1,json2))}

其中merge(j1,j2)是关于如何连接两个json对象的特定业务逻辑。