簡體   English   中英

有沒有辦法將兩個火花數據框與每行的自定義連接連接起來

[英]Is there a way to join two spark dataframes with custom join for each row

我有兩個數據幀 df 和 df2 如下

+------+---+----+
|  name|age|city|
+------+---+----+
|  John| 25|  LA|
|  Jane| 26|  LA|
|Joseph| 28|  SA|
+------+---+----+

+---+----+------+
|age|city|salary|
+---+----+------+
| 25|  LA| 40000|
| 26|    | 50000|
|   |  SF| 60000|
+---+----+------+

我想要我的結果數據框如下

+------+---+----+------+
|  name|age|city|salary|
+------+---+----+------+
|  John| 25|  LA| 40000|
|  Jane| 26|  LA| 50000|
|Joseph| 28|  SF| 60000|
+------+---+----+------+

基本上在這里我需要使用年齡、城市作為連接列進行連接,但是如果 df2 中的任何一列為空,那么我只需要與另一個非空列連接。 即使有大約 5 列要加入,我正在尋找的解決方案也應該適用,只有非空列應該參與每行的連接。

當您加入這些數據框然后選擇需要 groupBy 時,您可以提供更多條件。

df1.join(df2, 
    ($"age" === $"age2" || $"age2".isNull) &&
    ($"city" === $"city2" || $"city2".isNull), "left")
   .show

結果將是:

+------+---+----+----+-----+-------+
|  name|age|city|age2|city2|salary2|
+------+---+----+----+-----+-------+
|  John| 25|  LA|  25|   LA|  40000|
|  Jane| 26|  LA|  26| null|  50000|
|Joseph| 28|  SF|null|   SF|  60000|
+------+---+----+----+-----+-------+

但是當你有更多的列或者第二個數據幀有更多的空值時,結果會更復雜。

df1.join(df2,df1.col("age")===df2.col("age") || df1.col("city")===df2.col("city")).select(df1.col("name"),df1.col("age"),df1.col("city"),df2.col("salary")).show
+----+---+----+------+
|name|age|city|salary|
+----+---+----+------+
|john| 25|  LA| 40000|
|Jane| 26|  LA| 40000|
|Jane| 26|  LA| 50000|
+----+---+----+------+```

暫無
暫無

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

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