【问题标题】:Spark - Joining 2 PairRDD elementsSpark - 加入 2 个 PairRDD 元素
【发布时间】:2015-01-15 13:19:33
【问题描述】:

您好,有一个包含 2 个元素的 JavaRDDPair:

("TypeA", List<jsonTypeA>),

("TypeB", List<jsonTypeB>)

我需要将 2 对组合成 1 对类型:

("TypeA_B", List<jsonCombinedAPlusB>)

我需要将 2 个列表合并为 1 个列表,其中每个 2 个 json(A 类型的 1 个和 B 类型的 1 个)都有一些我可以加入的公共字段。

考虑类型 A 的列表明显小于另一个,并且连接应该是内部的,因此结果列表应该与类型 A 的列表一样小。

最有效的方法是什么?

【问题讨论】:

    标签: hadoop bigdata apache-spark


    【解决方案1】:

    rdd.join(otherRdd) 在第一个 rdd 上为您提供内部连接。要使用它,您需要将两个 RDD 转换为 PairRDD,该 PairRDD 具有您将加入的公共属性作为键。 像这样的东西(例如,未经测试):

    val rddAKeyed = rddA.keyBy{case (k,v) => key(v)}
    val rddBKeyed = rddB.keyBy{case (k,v) => key(v)}
    
    val joined = rddAKeyed.join(rddBKeyed).map{case (k,(json1,json2)) => (newK, merge(json1,json2))}
    

    其中merge(j1,j2)是关于如何连接两个json对象的具体业务逻辑。

    【讨论】:

    • 我认为 OP 没有询问语法而是询问性能 - 即 a.join(b) 比 b.join(a) 更有效
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-18
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多