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

PySpark的print在Spyder无输出但Anaconda Prompt正常的原因及解决方法

警告信息翻译

正在使用Spark默认log4j配置:org/apache/spark/log4j-defaults.properties
默认日志等级设置为"WARN"
调整日志等级可使用sc.setLogLevel(newLevel),SparkR环境使用setLogLevel(newLevel)
21/11/30 16:18:53 WARN NativeCodeLoader:无法为当前平台加载native-hadoop库,将在兼容场景使用内置Java类
D:\spark-3.2.0-bin-hadoop3.2\python\lib\pyspark.zip\pyspark\shuffle.py:60: 用户警告:请安装psutil以获得更好的内存溢出处理支持
21/11/30 16:19:08 WARN ProcfsMetricsGetter:计算页大小异常,进程树指标上报功能已停止

问题原因

1. Spyder中分两行打印无输出

  • Spyder 5.1.5版本的IPython内核存在多线程输出缓冲适配bug,PySpark运行时会产生大量子进程日志输出到标准流,分两行执行results=mod_rdd.collect()和print(results)时,Spark日志的输出会抢占缓冲区,print内容被缓冲截断,无法正常显示。
  • 直接打印print(mod_rdd.collect())时,返回值直接传入print函数,输出优先级更高,会被优先冲刷到控制台,因此可以正常显示。
  • Anaconda Prompt是纯终端环境,输出缓冲逻辑简单,不会出现这类抢占截断问题。

2. 安装psutil后警告仍存在

  • Spyder默认可能使用独立内置环境,和Anaconda Prompt激活的环境不是同一个,导致psutil没有安装到PySpark实际调用的环境中。
  • Windows版本的PySpark的shuffle模块存在psutil检测逻辑bug,部分场景下即使正确安装psutil也会误报警告,该警告仅为性能提示,不影响代码功能正常运行。
  • 上述警告中NativeCodeLoader和ProcfsMetricsGetter的提示均为Windows平台运行Spark的常见问题,不影响基础功能使用,可直接忽略。

3. PySpark是否必须在Anaconda Prompt运行

不需要。只要Python环境配置正确、Spark环境变量配置无误,PySpark可以在任意IDE/编辑器中运行,仅不同工具的输出缓冲、环境变量加载逻辑有差异,会出现适配问题。

修复方案
  • 解决Spyder打印无输出问题:
    • 方案1:在print语句前加强制冲刷缓冲区代码,修改原代码最后几行为:
      results=mod_rdd.collect()
      import sys
      sys.stdout.flush()
      print(results)
      
    • 方案2:初始化SparkSession时设置日志等级,减少无用日志输出抢占缓冲区:
      spark = SparkSession.builder.appName("test").master("local[*]").getOrCreate()
      spark.sparkContext.setLogLevel("ERROR")
      
    • 方案3:将Spyder升级到5.3及以上版本,该版本已修复多线程输出缓冲的适配bug。
  • 解决psutil警告问题:
    • 核对Spyder使用的Python解释器路径:打开工具 -> 偏好设置 -> Python解释器,确认路径和Anaconda Prompt激活的环境路径一致,在对应环境下用conda install psutil重新安装,避免pip和conda安装路径不匹配。
    • 若安装后仍有警告,可直接忽略,不影响功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:45:02