簡體   English   中英

加入兩個愛國數據框架pyspark

[英]join two patrition dataframe pyspark

我有兩個分區級別為2的數據框。數據框很小,每個大約100行。

df1:

col1    columnindex
null        1
null        2
null        3
null        4
100         5
101         6
102         7
103         8
104         9
105         10

DF2:

col2    columnindex
100         1
200         2
null        3
null        4
100         5
101         6
null        7
103         8
null        9
105         10

我最后的df將基於columnindex連接df1和df2。

col1    col2    columnindex
null    100       1
null    200       2
null    null      3
null    null      4
100     100       5
101     101       6
102     null      7
103     103       8
104     null      9
105     105       10

但是當我按照下面的方式加入兩個數據幀時,它看起來很混亂,給了我錯誤的結果。 我有什么辦法可以避免改組。

df1.join(df2, df1.columnindex == df2.columnindex, 'inner')

這取決於您改組是什么意思。

join1 = spark.createDataFrame([(None, 1), (None, 2), (None, 3), (100, 5), (101, 6), (105, 10)], ['col1', 'columnindex'])
join2 = spark.createDataFrame([(100, 1), (200, 2), (None, 3), (100, 5), (101, 6), (None, 10)], ['col2', 'columnindex'])
joined = join1.join(join2, ['columnindex'], 'inner').select(['columnindex', 'col1', 'col2'])
joined.show()

結果是:

+-----------+----+----+
|columnindex|col1|col2|
+-----------+----+----+
|          2|null| 200|
|          5| 100| 100|
|          3|null|null|
|          6| 101| 101|
|          1|null| 100|
|         10| 105|null|
+-----------+----+----+

這是正確的結果-每個columnindex都對應於兩個數據幀中的正確值,如果您進行任何進一步的計算,這應該不成問題。 但是,如果您希望按columnindex對值進行排序,則可以使用orderBy

joined.orderBy('columnindex').show()
+-----------+----+----+
|columnindex|col1|col2|
+-----------+----+----+
|          1|null| 100|
|          2|null| 200|
|          3|null|null|
|          5| 100| 100|
|          6| 101| 101|
|         10| 105|null|
+-----------+----+----+

關於連接的快速說明-如果使用df1.columnindex == df2.columnindex ,這將導致重復的columnindex列,您必須在使用orderBy對其進行排序之前解決該問題,這就是為什么將列名作為列出要join參數。

暫無
暫無

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

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