在SparkMagic+AWS Glue端点的Jupyter中导入自定义Python模块遇阻
解决AWS Glue端点Jupyter Notebook中自定义Python模块导入失败问题(依赖gluepython3)
问题核心
通过SSH连接AWS Glue端点的Jupyter Notebook,使用SparkMagic运行ETL时,自定义模块导入失败,原因是Notebook默认使用系统/usr/bin/python3,而非Glue专用的/usr/bin/gluepython3,且之前的配置方法(SparkMagic单参数配置、shell别名、.bashrc修改)均未生效。
可行解决方案
方案1:修改SparkMagic内核的Python解释器
Jupyter内核本身使用的是系统Python,需直接修改内核配置指定gluepython3:
- SSH登录Glue端点,找到SparkMagic内核的配置目录(通常为
/home/glue_user/.ipython/kernels/sparkkernel/) - 编辑
kernel.json文件,将argv数组中的第一个参数(原Python路径)替换为/usr/bin/gluepython3:{ "argv": [ "/usr/bin/gluepython3", "-m", "ipykernel", "-f", "{connection_file}" ], "display_name": "Spark", "language": "python" } - 重启端点上的Jupyter服务(例如
sudo systemctl restart jupyter,根据实际服务名调整)
方案2:同时配置Spark驱动端与执行端的Python解释器
之前仅配置了执行端参数,需补充驱动端配置,确保整个Spark上下文都使用gluepython3:
在Notebook中执行以下配置块(需在创建SparkContext前运行):
%%configure -f { "conf": { "spark.pyspark.python": "/usr/bin/gluepython3", "spark.pyspark.driver.python": "/usr/bin/gluepython3" } }
配置完成后,重启SparkContext(可通过重启Notebook内核实现),再验证sys.executable路径。
方案3:设置全局环境变量让Jupyter加载
Shell别名和.bashrc修改仅对交互式shell生效,需通过全局环境变量让Jupyter进程继承:
- 在Glue端点上创建或编辑
/etc/profile.d/glue_python.sh文件:export PYSPARK_PYTHON=/usr/bin/gluepython3 export PYSPARK_DRIVER_PYTHON=/usr/bin/gluepython3 - 执行
source /etc/profile.d/glue_python.sh使配置立即生效 - 重启Jupyter服务,确保新的环境变量被加载
验证步骤
配置完成后,在Notebook中运行以下代码确认解释器路径:
import sys print(sys.executable)
若输出为/usr/bin/gluepython3,即可尝试导入自定义模块:
from test.base.text import DataFields
原方法无效原因说明
alias仅为shell层面的命令别名,Jupyter内核进程不会继承shell别名配置- 仅设置
spark.pyspark.python仅作用于Spark执行节点,驱动端(Notebook本地的SparkContext)仍使用系统Python .bashrc的修改仅对交互式登录shell生效,Jupyter作为后台服务启动时不会加载用户的.bashrc
内容的提问来源于stack exchange,提问作者RX00
相关产品推荐
相关产品推荐

