【问题标题】:2 RDD that share keys but with different value How do I replace keys of RDD2 by corresponding RDD1 value2 共享键但具有不同值的 RDD 如何用相应的 RDD1 值替换 RDD2 的键
【发布时间】:2017-04-26 03:08:15
【问题描述】:

我有两个共享密钥但具有不同值的 RDD,例如

rdd1=(key,value1)

rdd2=((key, key),value2)

并将RDD2的key替换为对应RDD1的值

结果 = ((value1, value1),value2)

你觉得有可能吗?

例子

rdd1 = sc.parallelize([(1, "ABCD"), (2,"CDFE" ), (3,"FDFD")])
rdd2 = sc.parallelize([(1,2),1), ((1,3), 0), ((2,3),1)])

作为我想要的输出

result = ([("ABCD","CDFE"),1), (("ABCD","FDFD"), 0), (("CDFE","FDFD"),1)])

【问题讨论】:

    标签: python apache-spark


    【解决方案1】:

    我要做的是将两个 RDD 都转换为数据帧。第一个带有 keyA、valA 列,第二个带有 keyB1、keyB2 和 valB

    现在在它们之间进行连接。像这样的:

    df1 = dfB.join(dfA, on dfA["keyA"] == dfB["keyB1]).withColumnRenamed("valA", "firstKey")
    df2 = df1.join(dfA, on dfA["keyA"] == df1["keyB2]).withColumnRenamed("valA", "secondKey")
    

    现在您的数据框有 firstKey 和 secondKey 列作为键和 valB 作为值,只需转换回 RDD 和映射。

    【讨论】:

      【解决方案2】:

      使用 RDD:

      rdd1.join(rdd1.join(
          rdd2.keyBy(lambda x: x[0][0]
       )).values().keyBy(lambda x: x[1][0][1])).values() \
           .map(lambda x: ((x[0], x[1][0]), x[1][1][1]))
      

      【讨论】:

        猜你喜欢
        • 2019-10-14
        • 1970-01-01
        • 1970-01-01
        • 2012-05-09
        • 2022-08-12
        • 1970-01-01
        • 1970-01-01
        • 2013-10-16
        • 1970-01-01
        相关资源
        最近更新 更多