更新/合并组中的单个值,其中所有列在每个组中具有相同的值



我有一个数据质量任务,我需要允许每个组中的一行保持不变,然后将组中其余行的Delta表中的'duplicate'列更新为'true'。最初,当数据被加载到表中时,'duplicate'列中的所有值都是'false'。

数据以Delta格式存储,我在Databricks中使用Spark。

下面就是一个例子。然后,我想运行一个查询,将组中所有行的"重复"列更新为"真",只留下一个值为"假"。这样,下游管道仍然可以选择一个重复的值进行下游处理。

表的开头是这样的:

<表类> ID Value1 Value2 复制 tbody><<tr>23b假23b假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|
+---+------+------+---------+

相关内容

  • 没有找到相关文章

最新更新