如何在Azure Synapse中使用PySpark版GraphFrames?或生成对应.whl文件?
在Azure Synapse中使用GraphFrames Python版本的解决方案
问题背景
在Azure Synapse里运行GraphFrames的Python示例时遇到以下问题:
- 上传对应Jar包后,Scala代码可正常运行,但Python代码抛出
ModuleNotFoundError,无法识别Jar中的GraphFrames模块 - 根据Synapse文档,Python包需以
.whl格式上传,但pip仅提供不支持Spark 3.x的0.6.0版本,无适配Spark 3.x的GraphFrames wheel文件
可行解决办法
办法1:手动在Python会话中加载Jar和模块
GraphFrames的Python代码内嵌在Jar包中,无需单独whl即可加载:
- 先将适配Spark 3.x的GraphFrames Jar包(比如
graphframes-graphframes-0.8.2-spark3.2-s_2.12.jar)上传到Synapse工作区库或ADLS存储路径 - 在Python笔记本开头添加以下代码,指定Jar路径并导入模块:
from pyspark.sql import SparkSession # 初始化Spark会话时指定Jar包的ADLS路径 spark = SparkSession.builder \ .config("spark.jars", "abfss://<容器名>@<存储账户名>.dfs.core.windows.net/存储路径/graphframes.jar") \ .getOrCreate() # 将Jar包添加到Python路径,让Python识别内部的模块 import sys sys.path.append("abfss://<容器名>@<存储账户名>.dfs.core.windows.net/存储路径/graphframes.jar") # 正常导入GraphFrame使用 from graphframes import GraphFrame
办法2:自行构建适配Spark 3.x的Wheel包
如果必须使用.whl格式,可以从源码编译:
- 拉取GraphFrames官方源码,切换到对应Spark 3.x的版本分支(比如0.8.2版本适配Spark 3.2+)
- 安装构建依赖:
pip install setuptools wheel - 进入源码目录,执行构建命令:
python setup.py bdist_wheel --spark-version 3.2
- 构建完成后,
dist目录下会生成对应的.whl文件,上传到Synapse工作区库即可使用
办法3:通过Spark池初始化脚本自动配置
如果需要让整个Spark池都能直接使用GraphFrames,可配置初始化脚本:
- 创建shell脚本
setup_graphframes.sh,内容如下:
#!/bin/bash # 将Jar包复制到Spark默认类路径 cp /dbfs/存储路径/graphframes.jar /usr/lib/spark/jars/ # 将Jar包添加到Python全局路径 echo "export PYTHONPATH=\$PYTHONPATH:/usr/lib/spark/jars/graphframes.jar" >> /etc/spark/conf/spark-env.sh
- 将脚本和Jar包上传到ADLS存储路径
- 在Synapse Spark池的配置中指定该初始化脚本路径,重启Spark池后,所有Python会话可直接导入GraphFrames
内容的提问来源于stack exchange,提问作者joniba
相关产品推荐
相关产品推荐

