我有多个RDD,其中一个公共字段为CustomerId
。
例如:
debitcardRdd
的数据为(CustomerId, debitField1, debitField2, ......)
creditcardRdd
的数据为(CustomerId, creditField1, creditField2, ....)
netbankingRdd
的数据为(CustomerId, nbankingField1, nbankingField2, ....)
我们对每个单独的rdd执行不同的转换,但是我们需要通过对CustomerId
进行分组来对来自所有3个rdds的数据执行转换。
示例:(CustomerId,debitFiedl1,creditField2,bankingField1,....)
有什么方法可以根据相同的密钥对来自所有RDD的数据进行分组。
注意:在Apache Beam中,可以使用coGroupByKey
来完成,只需检查spark中是否有这样的替代方法即可。
答案 0 :(得分:0)
cogroup
debitcardRdd.keyBy(_.CustomerId).cogroup(
creditcardRdd.keyBy(_.CustomerId),
netbankingRdd.keyBy(_.CustomerId)
)
答案 1 :(得分:0)
与下面的对比,这里实际上并不需要.keyBy,我们注意到,没有很好描述的共群可以扩展到n个RDD。
val rddREScogX = rdd1.cogroup(rdd2,rdd3,rddn, ...)
分数应该是第一个答案。