使用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
相关产品推荐
相关产品推荐

