我有一个数据质量任务,我需要允许每个组中的一行保持不变,然后将组中其余行的Delta表中的'duplicate'列更新为'true'。最初,当数据被加载到表中时,'duplicate'列中的所有值都是'false'。
数据以Delta格式存储,我在Databricks中使用Spark。
下面就是一个例子。然后,我想运行一个查询,将组中所有行的"重复"列更新为"真",只留下一个值为"假"。这样,下游管道仍然可以选择一个重复的值进行下游处理。
表的开头是这样的:
<表类>
ID
Value1
Value2
复制
tbody><<tr>23 b 假 23 b 假 24道明> d 假 25道明> f 假 26g td> 假 26g td> 假 表类>
对于SQL,类似这样的操作应该可以达到目的。
WITH duplicates
AS (
SELECT
ID,
Duplicate,
ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ID) AS rn
FROM
myTable
)
UPDATE duplicates
SET Duplicate = 'false'
WHERE rn > 1
在pyspark中,您可以尝试使用下面的row_number
df1.withColumn("rank",row_number().over(Window.partitionBy("ID").orderBy("ID"))).withColumn("duplicate",when(col("rank")>1,True).otherwise(False)).drop("rank").show()
#output
+---+------+------+---------+
| Id|value1|value2|duplicate|
+---+------+------+---------+
| 23| a| b| false|
| 23| a| b| true|
| 24| c| d| false|
| 25| e| f| false|
| 26| g| h| false|
| 26| g| h| true|
+---+------+------+---------+