簡體   English   中英

Pyspark:通過重復連接具有不同行數的 2 個數據幀

[英]Pyspark: Join 2 dataframes with different number of rows by duplication

今天是個好日子,

假設我想加入以下兩個數據幀,以便 df2 的一行在 df1 中具有相同 id 的每一行的連接中重復:

df1 = sc.parallelize(Array((0, 1.5, 8.4, 9.1),
                           (0, 5.9, 1.3, 3.3),
                           (0, 3.2, 7.9, 4.2),
                           (0, 6.9, 2.2, 1.2)))
                           .toDF("id", "col1", "col2", "col3")

df2 = sc.parallelize(Array((0, 2.1, 3.4, 4.2)))
                           .toDF("id", "col4", "col5", "col6")

期望的結果如下所示:

df_joined.show() 

+---+-----+-----+-----+----+-----+-----+
| id| col1|col2 |col3 |col4|col5 |col6 |
+---+-----+-----+-----+----+-----+-----+
|  0|  1.5|  8.4|  9.1| 2.1|  3.4|  4.2|
|  0|  5.9|  1.3|  3.3| 2.1|  3.4|  4.2|
|  0|  3.2|  7.9|  4.2| 2.1|  3.4|  4.2|
|  0|  6.9|  2.2|  1.2| 2.1|  3.4|  4.2|
+---+-----+-----+-----+----+-----+-----+

我已經嘗試了所有外部連接,以及一個crossJoin ,它是兩個 dfs 之間的笛卡爾積,但沒有奏效。 一個粗暴的解決方案是將 df2 的行復制相應的 id 在 df1 中出現的次數,然后進行正常的外部連接,但我認為必須有一種方法可以通過使用連接來獲得所需的結果。

任何幫助表示贊賞。

我想你可以加入id

df1.join(df2, 'id').show()
+---+----+----+----+----+----+----+
| id|col1|col2|col3|col4|col5|col6|
+---+----+----+----+----+----+----+
|  0| 1.5| 8.4| 9.1| 2.1| 3.4| 4.2|
|  0| 5.9| 1.3| 3.3| 2.1| 3.4| 4.2|
|  0| 3.2| 7.9| 4.2| 2.1| 3.4| 4.2|
|  0| 6.9| 2.2| 1.2| 2.1| 3.4| 4.2|
+---+----+----+----+----+----+----+

暫無
暫無

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

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