[英]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.