【发布时间】:2021-12-14 00:02:38
【问题描述】:
我正在尝试比较 2 个数据帧并使用 pyspark 获取不匹配的行值。给定 df1 和 df2 格式如下
df1 :
+-----+---------+----------+--------+------+------+
| id|firstname|middlename|lastname|gender|salary|
+-----+---------+----------+--------+------+------+
|42114| Robert| |Williams| M| 5000|
|40288| Michael| Rose| | M| 4000|
|39192| Maria| Anne| Jones| F| 4000|
|36636| James| | Smith| M| 3000|
| | Jen| Mary| Browln| F| -1|
+-----+---------+----------+--------+------+------+
df2:
+-----+---------+----------+--------+------+------+
| id|firstname|middlename|lastname|gender|salary|
+-----+---------+----------+--------+------+------+
|42114| Robert| |Williams| M| 6000|
|40288| Michael| Rose| | M| 4000|
|39192| Maria| Anne| Jones| M| 4000|
|36636| James| | Smith| M| 3000|
| | Jen| Mary| Browln| F| -1|
+-----+---------+----------+--------+------+------+
当存在不匹配时 例如,第一行薪水列不匹配。所以 df1 和 df2 的值都需要并排写入
Output
+-----+---------+----------+--------+------+------++-----+---------+----------+--------+-
| id|firstname|middlename|lastname|gender|salary|df1_gender|df2_gender|df1_salary|df2_salay
+-----+---------+----------+--------+------+------+
|42114| Robert| |Williams| M | | | | | 6000. | 50000
|
|39192| Maria| Anne| Jones| | 4000 | F | M | | |
+-----+---------+----------+--------+------+------+
conditions_ = [when(df1[c] != df2[c], lit(c)).otherwise("") for c in df1.columns if c != 'id']
select_expr = [
col("id"),
[df2[c] for c in df2.columns if c != 'id'],
array_remove(array(*conditions_), "").alias("column_names")
]
df1.join(df2, "id").select(*select_expr).show()
我是这样的。有人可以帮我解决这个问题吗
【问题讨论】:
-
由于不匹配是不可预测的,所有列都可能不同(我想除了 ID),所以我们最终会发现所有列都是重复的,我理解正确吗?
-
你找到答案了吗?
标签: dataframe apache-spark pyspark