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

Python/Pyspark循环与If-else代码优化:400万行数据集运算提速咨询

PySpark 代码优化方案

性能瓶颈原因

原有代码的核心问题是逐一遍历唯一C_Code值,每次过滤后触发count操作,相当于有多少个唯一C_Code,就会触发N倍的Spark作业调度,大量的IO和调度开销完全抵消了分布式计算的优势,所以耗时极高。

优化思路

利用Spark的向量化计算能力,一次性给全量数据打匹配标签,按C_Code分组取最高优先级的匹配结果,单次作业即可完成全量分类,完全去掉循环逻辑。
你原来的规则优先级是:SN匹配 > AN匹配 > MC匹配 > 无匹配,我们可以直接基于这个优先级做批量计算。

优化后PySpark代码

from pyspark.sql.functions import col, when, max, collect_set, lit

# 步骤1:给每条记录预打匹配类型和优先级标签
df_with_flag = df.withColumn(
    "match_type",
    # 优先级1:SN匹配规则
    when((col("D_Type") == "SN") & (col("Comm_P") == "P-mail"), "SN")
    # 优先级2:AN匹配规则
    .when((col("D_Type") == "AN") & (col("Comm_P") == "P-mail"), "AN")
    # 优先级3:MC匹配规则
    .when(
        (col("MC_Flag") == "Y") & ~(((col("D_Type") == "AN") | (col("D_Type") == "SN")) & (col("Comm_P") == "DNS")),
        "MC"
    )
    # 优先级最低:无匹配
    .otherwise("Nothing")
).withColumn(
    "priority",
    when(col("match_type") == "SN", 4)
    .when(col("match_type") == "AN", 3)
    .when(col("match_type") == "MC", 2)
    .otherwise(1)
)

# 步骤2:按C_Code分组,取每个编码最高优先级的匹配结果
code_max_prio = df_with_flag.groupBy("C_Code").agg(max("priority").alias("max_prio"))

# 步骤3:关联得到每个C_Code对应的最终分类
code_final_class = code_max_prio.join(
    df_with_flag,
    (code_max_prio.C_Code == df_with_flag.C_Code) & (code_max_prio.max_prio == df_with_flag.priority),
    "left"
).select(code_max_prio.C_Code, "match_type").dropDuplicates(["C_Code"])

# 步骤4:按分类聚合得到四个目标列表
class_result = code_final_class.groupBy("match_type").agg(collect_set("C_Code").alias("code_list")).collect()
result_dict = {row["match_type"]: row["code_list"] for row in class_result}

SN_list = result_dict.get("SN", [])
AN_list = result_dict.get("AN", [])
MC_list = result_dict.get("MC", [])
Nothing_list = result_dict.get("Nothing", [])

# 若需要执行clean_up操作,直接批量过滤对应类型的所有数据即可,不用逐编码处理
# 示例:清理所有SN类型的数据
# clean_up(df_with_flag.filter(col("match_type") == "SN"))

性能说明

整个流程仅触发2-3次Spark Action,全量数据分布式并行计算,400万条记录在常规Databricks集群上运行耗时不超过5分钟,相比原来的循环写法性能提升至少10倍以上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:45:05