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

时间:2018-03-08 05:46:44

标签: 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
2       6        
8       0       8

我期待

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

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

1 个答案:

答案 0 :(得分:2)

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

在这种情况下,你可以做的是将数据框分成两个数据框一个在键列中显示所有空值或空值另一个在键列中没有空值的数据框。然后在第二个数据框上应用 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)