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

问题描述 投票:0回答:2

我有多个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中是否有这样的替代选项。

apache-spark rdd
2个回答
0
投票

只是cogroup

debitcardRdd.keyBy(_.CustomerId).cogroup(
  creditcardRdd.keyBy(_.CustomerId),
  netbankingRdd.keyBy(_.CustomerId)
)

0
投票

与下面相反,.keyBy在这里并不是真正需要的,我们注意到cogroup - 没有很好地描述可以扩展到n个RDD。

val rddREScogX = rdd1.cogroup(rdd2,rdd3,rddn, ...)

积分应该转到第一个答案。

© www.soinside.com 2019 - 2024. All rights reserved.