Scala 如何避免在传递单个列时从dropduplicate函数中删除空值

Scala 如何避免在传递单个列时从dropduplicate函数中删除空值,scala,apache-spark,Scala,Apache Spark,我有下面的数据框,我需要从中保持不从键列中删除空值。我知道,如果我们再传递一列,那么我们可以避免删除空值,但我的问题是,从键列开始,我只需要删除重复的值,我不应该删除空值 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
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
如果我使用上面的函数,它也会删除空值。如果我有其他选择,请提供给我。

问题是,如果
列是
StringType
IntegerType
或null值,则所有空值都被视为重复值,输出中只有一行显示为原始值

在这种情况下,您可以将数据帧分为两个数据帧,一个在键列中包含所有null或空值,另一个在键列中包含非null值的数据帧。然后在第二个数据帧上应用拖放副本,最后合并两个数据帧

以编程方式,上面的解释应与下面的代码相同

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)

谢谢你的回复…现在我可以在输出中显示一个空值,但是我在键列中有多个空值,我想显示所有的空值。我在StringType中显示你的键列,对吗?答案不会帮助你,因为即使你用0填充,那么所有的0都会被认为是重复的,这也是你的情况。只有一个null被认为是空的,其余的都是重复的。对于代码,我需要知道键列的数据类型。