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

使用PySpark时如何正常显示TQDM进度条?

解决PySpark进度日志覆盖TQDM的问题

下面提供几种可行的解决办法:

方法1:直接关闭PySpark控制台进度条

通过Spark配置项关闭Stage进度日志的控制台输出,这是最直接的方式:

from pyspark.sql import SparkSession

# 初始化SparkSession时配置
spark = SparkSession.builder \
    .appName("YourApp") \
    .config("spark.ui.showConsoleProgress", "false") \
    .getOrCreate()

# 或者运行时动态调整日志级别(只保留错误信息)
spark.sparkContext.setLogLevel("ERROR")

spark.ui.showConsoleProgress=false会直接禁用控制台的Stage进度条;setLogLevel("ERROR")则会过滤掉INFO级别的日志输出,只保留错误类信息,避免干扰TQDM显示。

方法2:将PySpark日志重定向到文件

如果需要保留Spark日志但不想在Notebook控制台显示,可以把日志输出到文件:

import logging
import sys

# 获取Py4J的日志记录器(Spark日志通过Py4J输出)
logger = logging.getLogger("py4j")
logger.setLevel(logging.ERROR)

# 可选:将日志写入文件
file_handler = logging.FileHandler("spark_runtime.log")
logger.addHandler(file_handler)
# 移除控制台输出处理器
for handler in logger.handlers:
    if isinstance(handler, logging.StreamHandler):
        logger.removeHandler(handler)

方法3:固定TQDM进度条位置

如果不想修改Spark配置,可以通过TQDM的参数固定进度条位置,避免被Spark日志冲掉:

for week in tqdm(weeks, position=0, leave=True):
    df = spark.read.parquet(some_file_path)
    df = df.groupBy([col1, col2]).agg(F.sum(col1)).toPandas()

position=0让进度条固定在控制台第一行,leave=True确保循环结束后进度条不会被清除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:31:06