簡體   English   中英

通過一列將pyspark中的兩個數據框連接起來

[英]Join two dataframes in pyspark by one column

我有兩個數據框,我需要按一列進行連接,並且如果該ID包含在第二個數據框的同一列中,則僅從第一個數據框獲取行:

DF1:

  id    a     b
  2     1     1
  3    0.5    1
  4     1     2
  5     2     1

DF2:

 id      c    d
  2      fs   a
  5      fa   f

所需的輸出:

df:
  id   a   b
   2   1   1
   5   2   1

我已經嘗試過df1.join(df2(“ id”),“ left”),但給我錯誤:'Dataframe'對象不可調用。

如果需要檢查df2是否存在id ,並且df2的輸出中不需要任何列,則isin()是更有效的解決方案(與SQL中的EXISTSIN相似)。

df1 = spark.createDataFrame([(2,1,1) ,(3,5,1,),(4,1,2),(5,2,1)], "id: Int, a : Int , b : Int")

df2 = spark.createDataFrame([(2,'fs','a') ,(5,'fa','f')], ['id','c','d'])

創建df2.id作為列表並將其傳遞給isin isin()下的df1

from pyspark.sql.functions import col

df2_list = df2.select('id').rdd.map(lambda row : row[0]).collect()

df1.where(col('id').isin(df2_list)).show()

#+---+---+---+
#| id|  a|  b|
#+---+---+---+
#|  2|  1|  1|
#|  5|  2|  1|
#+---+---+---+

建議使用isin() IF-

  • 您不需要從參考數據框/表返回數據

  • 您在參考數據框/表中有重復項(如果重復值,則JOIN可能導致重復行)

  • 您只想檢查特定值的存在

df2("id")不是用於選擇列的有效python語法,您需要df2[["id"]]或使用select df2.select("id") 例如,您可以執行以下操作:

df1.join(df2.select("id"), "id").show()

+---+---+---+
| id|  a|  b|
+---+---+---+
|  5|2.0|  1|
|  2|1.0|  1|
+---+---+---+

要么:

df1.join(df2[["id"]], "id").show()
+---+---+---+
| id|  a|  b|
+---+---+---+
|  5|2.0|  1|
|  2|1.0|  1|
+---+---+---+

暫無
暫無

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

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