【问题标题】:How to use groupByKey() on multiple RDDs?如何在多个 RDD 上使用 groupByKey()?
【发布时间】:2018-09-11 13:58:21
【问题描述】:

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

【问题讨论】:

  • 我明确提到了预期,它与样本数据无关。不知道为什么这被否决了。
  • 我觉得你可以加入所有的rdds然后分组。
  • 不确定它是否等同于 Apache Beam 的 coGroupByKey,Spark RDD[K, V] 确实有 cogroup。这是一个相关的SO link

标签: apache-spark rdd


【解决方案1】:

只要cogroup

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

【讨论】:

    【解决方案2】:

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

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

    第一个答案应该加分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-31
      • 2015-03-17
      • 2017-04-25
      • 1970-01-01
      相关资源
      最近更新 更多