M3芯片macOS下PySpark pandas_udf致Python Worker崩溃求助
解决方案:M3芯片macOS下PySpark pandas_udf触发EOFError
针对你在M3芯片macOS虚拟环境中运行PySpark时,调用pandas_udf触发EOFError的问题,可尝试以下几种解决方法:
1. 强制Spark使用虚拟环境中的Python解释器
Spark Worker可能默认调用系统Python而非虚拟环境版本,导致依赖不匹配。在代码开头添加环境变量设置:
import os # 替换为你的虚拟环境Python路径 os.environ["PYSPARK_PYTHON"] = "/Users/monir/Documents/work/image-inference/.venv/bin/python" os.environ["PYSPARK_DRIVER_PYTHON"] = "/Users/monir/Documents/work/image-inference/.venv/bin/python"
或在终端运行脚本前执行:
export PYSPARK_PYTHON="/Users/monir/Documents/work/image-inference/.venv/bin/python" export PYSPARK_DRIVER_PYTHON="/Users/monir/Documents/work/image-inference/.venv/bin/python"
2. 降低PyArrow版本
高版本PyArrow(如17.0.0)与PySpark 3.5.2在Apple Silicon架构下存在兼容性问题,将PyArrow降级至14.0.2:
pip install pyarrow==14.0.2 --force-reinstall
3. 更换兼容的Java版本
Java 22版本过于超前,Spark 3.5.2官方推荐使用Java 8或11。通过Homebrew安装OpenJDK 11:
brew install openjdk@11
设置JAVA_HOME环境变量:
export JAVA_HOME="/usr/local/opt/openjdk@11" export PATH="$JAVA_HOME/bin:$PATH"
之后重新运行PySpark脚本。
4. 禁用Spark Worker重用
Worker进程重用可能导致缓存兼容性问题,在SparkSession配置中添加:
spark = (SparkSession.builder.appName("InferenceValidation") .config("spark.driver.memory", "8g") .config("spark.executor.memory", "8g") .config("spark.sql.execution.arrow.pyspark.enabled", "false") .config("spark.sql.execution.arrow.pyspark.fallback.enabled", "true") .config("spark.python.worker.reuse", "false") # 禁用worker重用 .getCreate())
内容的提问来源于stack exchange,提问作者Md. Moniruzzaman
相关产品推荐
相关产品推荐

