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被认为是空的,其余的都是重复的。对于代码,我需要知道键列的数据类型。