簡體   English   中英

根據相同的列名加入多個 Pyspark 數據框

[英]Join multiple Pyspark dataframes based on same column name

我是 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 的新數據框的最終版本?

你很近。 假設您有以下 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|
+------------+-----+------+------+------+------+

如果您在列上連接兩個數據框,那么列將被復制,就像您的情況一樣。 所以我建議使用一個字符串數組,或者只是一個字符串,即“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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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