Pyspark Standalone模式用conda+jupyter缺PyArrow依赖怎么解决
问题修复步骤
1. 验证conda打包环境的依赖完整性
先确认你打包的conda环境中确实安装了符合版本要求的pyarrow:
conda activate pyspark_conda_env python -c "import pyarrow; print(pyarrow.__version__)"
如果输出版本低于0.15.1,或者提示找不到pyarrow,在当前激活的环境中重新安装后再打包:
conda install -y -c conda-forge pyarrow>=0.15.1 conda pack -f -o pyspark_conda_env.tar.gz
2. 补全Spark Python解释器配置
你之前只配置了executor端的Python路径,Standalone模式下需要同时指定driver端的Python路径,保证两端Python环境一致,修改你的Spark初始化代码:
import os from pyspark.sql import SparkSession # executor端使用压缩包中的conda环境Python os.environ['PYSPARK_PYTHON'] = "./environment/bin/python" # driver端使用当前notebook运行的conda环境Python os.environ['PYSPARK_DRIVER_PYTHON'] = f"{os.environ['CONDA_PREFIX']}/bin/python" spark = SparkSession.builder\ .config("spark.archives", "pyspark_conda_env.tar.gz#environment")\ # 多节点Standalone集群请将压缩包上传至HDFS或所有worker节点的相同路径,填写对应路径即可 # .config("spark.archives", "hdfs:///公共路径/pyspark_conda_env.tar.gz#environment") .getOrCreate()
3. 检查压缩包路径有效性
- 单节点本地Standalone场景:确保
pyspark_conda_env.tar.gz和你启动jupyter notebook的工作目录一致,否则请填写压缩包的绝对路径到spark.archives配置中 - 多节点Standalone场景:压缩包必须放在所有worker节点都能访问到的路径,推荐上传到HDFS使用
4. 排查全局配置冲突
如果你在Spark的spark-env.sh配置文件或者系统环境变量中设置过全局的PYSPARK_PYTHON,会覆盖你在notebook中的配置,启动jupyter前先清空相关变量:
unset PYSPARK_PYTHON unset PYSPARK_DRIVER_PYTHON jupyter notebook
验证排查手段
如果以上步骤执行后仍报错,可以运行以下代码查看executor实际使用的Python环境信息,定位问题:
def check_env(_): import sys try: import pyarrow return f"Python路径:{sys.executable},PyArrow版本:{pyarrow.__version__}" except ImportError: return f"Python路径:{sys.executable},未找到PyArrow" print(spark.sparkContext.range(1).map(check_env).collect())
内容的提问来源于stack exchange,提问作者huy
相关产品推荐
相关产品推荐

