2共享密钥但具有不同值的RDD如何用相应的RDD1值替换RDD2的密钥

时间:2016-12-10 21:54:29

标签: python apache-spark

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

RDD1集=(键,值1)

rdd2 =((键,键),值2)

并替换RDD2的键以对应RDD1值

result =((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)])

2 个答案:

答案 0 :(得分: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")

现在你的数据帧有key的firstKey和secondKey列以及值的valB,只需转换回RDD并映射。

答案 1 :(得分:0)

使用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]))