我有两个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)])
答案 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]))