pyspark合并/加入两个数据框

时间:2018-01-07 14:32:04

标签: join merge pyspark

我想合并两个数据框。

列表1:

      id        
0   1234
1   456
2   789
3   101112

清单2:

      id    age        
0   456      18
1   101112   52

期望的结果:

      id    age     
0   1234     Na
1   456      18
2   789      Na
3   101112   52

尝试:

list1.join(list2,list1.id==list2.id,'inner')

错误:

ValueError: Can only compare identically-labeled Series objects

尝试:

list1.merge(list2)

错误:

结果是清单2.

问题是什么?

2 个答案:

答案 0 :(得分:2)

您需要执行left_outer联接,因此不会删除记录

list3 = list1.join(list2, 'id', 'left_outer')
list3.show()

+------+----+
|    id| age|
+------+----+
|   789|null|
|  1234|null|
|101112|  52|
|   456|  18|
+------+----+

答案 1 :(得分:1)

如果你有两个dataframe

list1 = sqlContext.createDataFrame([(1234,), (456,), (789,), (101112,)], ["id"])
list1.show()
+------+
|    id|
+------+
|  1234|
|   456|
|   789|
|101112|
+------+

list2 = sqlContext.createDataFrame([(456,18), (101112, 52)], ["id", "age"])
list2.show()
+------+---+
|    id|age|
+------+---+
|   456| 18|
|101112| 52|
+------+---+

left join可以为您提供所需的结果

list1.join(list2, "id", "left").show()

+------+----+
|    id| age|
+------+----+
|   789|null|
|  1234|null|
|101112|  52|
|   456|  18|
+------+----+