![](/img/trans.png)
[英]Spark rdd1 and rdd2 do inner join, new value is the value in rdd1
[英]2 RDD that share keys but with different value How do I replace keys of RDD2 by corresponding RDD1 value
我有兩個共享密鑰但具有不同值的RDD,例如
rdd1 =(鍵,值1)
rdd2 =(((鍵,鍵),值2)
並替換RDD2的鍵以對應RDD1值
結果=((值1,值1,),值2)
您認為有可能嗎?
例
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)])
我要做的是將兩個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並映射即可。
使用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]))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.