你有一个带有2个元素的JavaRDDPair:
("TypeA", List<jsonTypeA>),
("TypeB", List<jsonTypeB>)
我需要将2对组合成1对类型:
("TypeA_B", List<jsonCombinedAPlusB>)
我需要将2个列表合并为1个列表,其中每个2个jsons(1个A类型和1个B类型)都有一些我可以加入的公共字段。
考虑到类型A的列表明显小于另一个,并且连接应该是内部的,因此结果列表应该与类型A的列表一样小。
最有效的方法是什么?
答案 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对象的特定业务逻辑。