簡體   English   中英

2個共享密鑰但值不同的RDD如何用相應的RDD1值替換RDD2的密鑰

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM