嗨,我有一个这样的数据集:
id | 名字 |
---|---|
1 | A |
2 | 空 |
2 | B |
3 | C |
3 | 空 |
4 | 空 |
如果 ID 重复,我想保留名称不为空的唯一值
在这个例子中我想得到这个表:
id | 名字 |
---|---|
1 | A |
2 | B |
3 | C |
4 | 空 |
我尝试使用 df.dropDuplicates() 函数,但我不知道如何指定在“名称”列中保留非空值
这是一种使用
window
和 distinct
函数消除重复项的方法。
df
.withColumn(
"name",
expr("FIRST(name, TRUE) OVER(PARTITION BY id ORDER BY id)")
)
.distinct
.show(10, False)
+---+----+
|id |name|
+---+----+
|1 |A |
|2 |B |
|3 |C |
|4 |NULL|
+---+----+