我有以下数据框,我需要保持空值不会从键列中删除。我知道如果我们再传递一个列,那么我们可以避免删除空值,但我的问题来自键列我只需要删除重复的值,我不应该删除空值。
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
如果我使用上面的函数,它也会删除空值。如果我有其他选择,请提供给我。
答案 0 :(得分:2)
问题是所有空值,如果key
列是StringType
,IntegerType
或空值,被认为是重复和输出中只有一行显示为原始。
在这种情况下,你可以做的是将数据框分成两个数据框,一个在键列中显示所有空值或空值和另一个在键列中没有空值的数据框。然后在第二个数据框上应用 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)