Jupyter Notebook导入graphframes报错:No module named graphframes
首先,你当前的包加载方式存在核心问题:在Jupyter Notebook这类交互式环境里执行!pyspark --packages ...,其实是启动了一个全新的独立Spark进程,但当前Notebook的内核并没有加载这个依赖包,后续执行from graphframes import *还是用的原来未配置依赖的Spark上下文,自然会找不到模块。
下面给你几个可行的解决办法,按推荐程度排序:
方法1:启动Notebook前直接指定GraphFrames依赖
如果你通过pyspark命令启动Notebook,直接在启动时带上packages参数,让内核一开始就加载依赖:
pyspark --packages graphframes:graphframes:0.5.0-spark2.1-s_2.11 --ipython notebook
启动完成后,直接执行from graphframes import *就能正常导入了。
方法2:在已启动的Notebook内核中动态添加依赖
如果已经打开了Notebook不想重启,可以通过SparkConf配置依赖后再创建SparkSession:
from pyspark import SparkConf from pyspark.sql import SparkSession # 配置GraphFrames依赖包 conf = SparkConf().set("spark.jars.packages", "graphframes:graphframes:0.5.0-spark2.1-s_2.11") # 基于配置创建SparkSession(自动关联SparkContext) spark = SparkSession.builder.config(conf=conf).getOrCreate() sc = spark.sparkContext # 现在可以正常导入了 from graphframes import *
⚠️ 注意:一定要确保GraphFrames版本和你的Spark版本匹配——你用的0.5.0版本对应Spark 2.1,如果实际Spark版本不是2.1,要换成对应版本的GraphFrames包(比如Spark 2.2对应0.5.1,Spark 2.3对应0.6.0等)。
方法3:手动下载JAR包添加到Spark路径
如果网络问题导致无法自动下载依赖,可以手动下载对应版本的GraphFrames JAR包,然后:
- 把JAR包放到Spark安装目录的
jars文件夹下; - 或者启动Spark时用
--jars参数指定本地路径:
pyspark --jars /你的本地路径/graphframes-0.5.0-spark2.1-s_2.11.jar --ipython notebook
最后再提个细节:你之前的代码先创建了SparkContext,再执行!pyspark --packages...,这个顺序完全错了——SparkContext一旦创建,就没法再加载新的依赖包了,必须先确保依赖配置完成,再创建Spark上下文/SparkSession。
内容的提问来源于stack exchange,提问作者Daniel Chepenko

