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

Spark窗口操作单任务Shuffle耗时过长,疑数据倾斜求解

Spark窗口操作单任务Shuffle耗时过长问题分析与优化咨询

问题概述

分析Spark任务指标时发现:尽管整体数据分布相对均匀,但存在单个任务完成时间远高于其他任务的情况,经排查是Shuffle读取时间过长导致。请问这仍属于数据倾斜问题吗?

该问题发生在窗口操作场景下(列名已做隐私修改,含义保留),当前处理规模为1220亿条记录,Executor配置为240个,每个Executor分配10核、60GB内存,内存开销14GB——该配置实践证明比小Executor效果更优。

核心代码

df = (df
    .withColumn(
        "duplicate_rank",
        f.rank().over(
            Window.partitionBy(
                "student_id",
                "student_address_id",
                "student_thesis_name",
            ).orderBy(
                "thesis_chronology_rank",
                "thesis_start_year",
                f.col("thesis_end_year").desc(),
            )
        ),
    ).filter(f.col("duplicate_rank") == 1))

任务耗时指标图

Spark任务耗时指标图

已尝试方案与疑问

  • 曾尝试随机加盐(20个桶)并执行两次窗口操作(加盐分区与原分区),但效果不佳。推测原因是所有分区键均为字符串,Shuffle过程中排序开销大,导致数据传输时间过长。
  • 测试发现按student_thesis_name列重分区后,性能大幅提升。但查看物理执行计划时,仅能看到Exchange之后的窗口操作。存在疑问:窗口的分区键包含student_id、student_address_id、student_thesis_name三列,Spark是否仍会在重分区后执行额外的Shuffle?如果是,为何未在物理计划中显示?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 00:31:10