gpt4 book ai didi

scala - 传递单列时如何避免从 dropduplicate 函数中删除空值

转载 作者:行者123 更新时间:2023-12-04 16:04:57 25 4
gpt4 key购买 nike

我有以下数据框,我需要从中保持空值不从键列中删除。我知道,如果我们再传递一列,那么我们就可以避免丢弃空值,但我的问题来自关键列,我只需要删除重复的值,我不应该删除空值。

id    pin    key  
-----------------
1 9 9
9 8 9
2 6
6 3
8 0 8

df.dropDuplicates("key").show()

我得到如下输出,

id    pin    key  
-----------------
1 9 9
2 6
8 0 8

我很期待

id    pin    key  
-----------------
1 9 9
2 6
6 3
8 0 8

如果我使用上面的函数,它也会删除空值。如果我有任何其他选择,请提供给我。

最佳答案

问题是所有空值,如果 key 列是 StringTypeIntegerType 或 < em>空值,被认为是重复并且只有一行在输出中显示为原始值

在这种情况下,您可以做的是将数据帧分成两个数据帧一个在键列中包含所有空值或空值另一个在键列中没有空值的数据框。然后在第二个数据帧上应用dropDuplicates,最后合并两个数据帧

上面的编程解释应该与下面的代码相同

import org.apache.spark.sql.functions._
val dfWithNull = df.filter(col("key").isNull || col("key") === "")
val dfWithoutNull = df.except(dfWithNull).dropDuplicates("key")

dfWithNull.union(dfWithoutNull).show(false)

关于scala - 传递单列时如何避免从 dropduplicate 函数中删除空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49166258/

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