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