我是 Pyspark 的新手,所以這就是為什么我堅持以下幾點:
我有 5 個資料幀,每個資料幀都有相同的主鍵,稱為關注代碼。我需要將所有這些資料幀外部連接在一起,并需要從 4 個資料幀中洗掉名為關注代碼的 4 列。
例如:Dataframe Df1 外連接 Df2 基于關注_code Dataframe Df1 外連接 Df3 基于關注_code 等等..
我當前的 Pyspark 語法如下所示:
df1.join(df2,["concern_code"])\
.join(df3,df1["concern_code"] == df3["concern_code"])\
.join(df4,df1["concern_code"] == df4["concern_code"])\
.join(df5,df1["concern_code"] == df5["concern_code"])\
.show()
我需要如何修復語法以執行外連接并獲得只有一列 care_code 的新資料框的最終版本?
uj5u.com熱心網友回復:
你很近。假設您有以下 dfs:
d = [
("a", 5.2),
("b", 10.4),
("c", 7.8),
("d", 11.2),
]
df1 = spark.createDataFrame(d, ['concern_code','value'])
df2 = spark.createDataFrame(d, ['concern_code','value1'])
df3 = spark.createDataFrame(d, ['concern_code','value2'])
df4 = spark.createDataFrame(d, ['concern_code','value3'])
df5 = spark.createDataFrame(d, ['concern_code','value4'])
df1.show()
# output
------------ -----
|concern_code|value|
------------ -----
| a| 5.2|
| b| 10.4|
| c| 7.8|
| d| 11.2|
------------ -----
(
df1
.join(df2,on="concern_code", how="outer")
.join(df3,on="concern_code", how="outer")
.join(df4,on="concern_code", how="outer")
.join(df5,on="concern_code", how="outer")
.show()
)
# output
------------ ----- ------ ------ ------ ------
|concern_code|value|value1|value2|value3|value4|
------------ ----- ------ ------ ------ ------
| c| 7.8| 7.8| 7.8| 7.8| 7.8|
| d| 11.2| 11.2| 11.2| 11.2| 11.2|
| a| 5.2| 5.2| 5.2| 5.2| 5.2|
| b| 10.4| 10.4| 10.4| 10.4| 10.4|
------------ ----- ------ ------ ------ ------
uj5u.com熱心網友回復:
如果您在列上連接兩個資料框,那么列將被復制,就像您的情況一樣。所以我建議使用一個字串陣列,或者只是一個字串,即“id”,來連接兩個或多個資料框。
下面的代碼不應重復列名:
df1.join(df2,on='id', how='outer')\
.join(df3,on='id', how='outer')\
.join(df4,on='id', how='outer')\
.join(df5,on='id' how='outer')\
.show()
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/331604.html
