gpt4 book ai didi

dataframe - Pyspark Dataframe 差异 - param != null 不返回的地方?

转载 作者:行者123 更新时间:2023-12-04 14:46:55 24 4
gpt4 key购买 nike

我正在编写一个函数来输出具有两个数据帧之间差异的数据帧。简化后,它看起来像这样:

differences = df1.join(df2, df1['id'] == df2['id'], how='full') \
.select(F.coalesce(df1['id'], df2['id']).alias('id'), df1['name'], df2['name'])
.where(df1['name'] != df2['name'])

对于以下 2 个数据集,我希望第 3 个数据集是输出:

+---+-----+
| id| name|
+---+-----+
| 1|Alice|
| 2| Bob|
| 3|Carol|
| 4| Dan|
| 5| Eve|
+---+-----+

+---+-----+
| id| name|
+---+-----+
| 1|Alice|
| 2| Ben|
| 4| Dan|
| 5| Eve|
| 6| Finn|
+---+-----+

+---+-------+-------+
|age| name| name|
+---+-------+-------+
| 2| Bob| Ben|
| 3| Carol| null|
| 6| null| Finn|
+---+-------+-------+

但是当我在数据 block 中运行它时,结果数据框中省略了空列。

+---+-------+-------+
|age| name| name|
+---+-------+-------+
| 2| Bob| Ben|
+---+-------+-------+

where 子句不考虑 != 吗?创建这些框架时是否有隐藏的逻辑?

最佳答案

来自 Why [table].[column] != null is not working? :

“数据库中的 NULL 不是值。它的意思是“未知”或“数据丢失”。

您无法判断您没有任何信息的事物是否等于您也没有任何信息(=、!= 运算符)的事物。但是你可以说是否有任何可用的信息(IS NULL,IS NOT NULL)。”

因此您将不得不添加更多条件:

differences = df1.join(df2, df1['id'] == df2['id'], how='full')\
.select(F.coalesce(df1['id'], df2['id']).alias('id'), df1['Name'], df2['Name'])\
.where((df1['Name'] != df2['Name']) | ((df1['Name']).isNull() | (df2['Name']).isNull()))


+---+-----+----+
|id |Name |Name|
+---+-----+----+
|2 |Bob |Ben |
|3 |Carol|null|
|6 |null |Finn|
+---+-----+----+

关于dataframe - Pyspark Dataframe 差异 - param != null 不返回的地方?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69858946/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com