如何在多个RDD上使用groupByKey()?

时间:2018-09-11 13:58:21

标签: apache-spark rdd

我有多个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中是否有这样的替代方法即可。

2 个答案:

答案 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, ...)

分数应该是第一个答案。