You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Databricks 基于排序过滤的数据去重方案咨询

Azure Databricks 表去重实现方案

核心逻辑说明

按照code+type作为分组键,每组如果存在2条及以上重复记录,仅保留version不等于PMS的记录;如果组内仅1条记录则直接保留,最终按code、type顺序排序输出即可。

实现方式一:PySpark 代码实现

# 假设你的原始表名为source_table,先读取为DataFrame
df = spark.table("source_table")

from pyspark.sql import functions as F
from pyspark.sql.window import Window

# 1. 按code+type分组统计每组记录数
window_spec = Window.partitionBy("code", "type")
df_with_cnt = df.withColumn("group_cnt", F.count("*").over(window_spec))

# 2. 按规则过滤记录
df_filtered = df_with_cnt.filter(
    (F.col("group_cnt") == 1) | 
    ((F.col("group_cnt") > 1) & (F.col("version") != "PMS"))
)

# 3. 按要求排序,输出结果
result_df = df_filtered.select("version", "value", "code", "type") \
                       .orderBy(F.col("code").asc(), F.col("type").asc())

# 查看结果
result_df.show()
# 如果要写入表可以执行:result_df.write.saveAsTable("target_table")

实现方式二:Spark SQL 代码实现

直接在Databricks的SQL编辑器中执行以下语句即可:

WITH group_count AS (
    SELECT 
        *,
        COUNT(*) OVER (PARTITION BY code, type) AS group_cnt
    FROM source_table -- 替换为你的原始表名
)
SELECT version, value, code, type
FROM group_count
WHERE group_cnt = 1 OR (group_cnt > 1 AND version != 'PMS')
ORDER BY code ASC, type ASC;

输出验证

上述两种方式执行后都会得到你要求的结果:

+-------+------+----+---------+
|version| value|code|     type|
+-------+------+----+---------+
|    000|312.00|  01|    HOURS|
|    000|835.00|  01|NON STOCK|
|    000|  0.00|  04|    HOURS|
|    000|835.00|  04|NON STOCK|
+-------+------+----+---------+

内容的提问来源于stack exchange,提问作者pavithra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 02:06:01