我已经下载了graphframes
包(从这里),并将其保存在本地磁盘上。现在,我想使用它。所以,我使用以下命令:
IPYTHON_OPTS="notebook --no-browser" pyspark --num-executors=4 --name gorelikboris_notebook_1 --py-files ~/temp/graphframes-0.1.0-spark1.5.jar --jars ~/temp/graphframes-0.1.0-spark1.5.jar --packages graphframes:graphframes:0.1.0-spark1.5
除了新的graphframes
包之外,所有pyspark功能都能按预期工作:每当我尝试import graphframes
时,我都会得到一个ImportError
。当我检查sys.path
时,我可以看到以下两条路径:
/tmp/spark-1eXXX/userFiles-9XXX/graphframes_graphframes-0.1.0-spark1.5.jar
和/tmp/spark-1eXXX/userFiles-9XXX/graphframes-0.1.0-spark1.5.jar
,但是这些文件并不存在。此外,/tmp/spark-1eXXX/userFiles-9XXX/
目录为空。
我错过了什么?
在我的例子中:
1、 cd /home/zh/.ivy2/jars
2、 jar xf graphframes_graphframes-0.3.0-spark2.0-s_2.11.jar
3、 将/home/zh/.ivy2/jar添加到类似上面代码的spark-env.sh中的PYTHONPATH:
export PYTHONPATH=$PYTHONPATH:/home/zh/.ivy2/jars:.
这可能是使用Python的Spark包中的一个问题。之前有人在Spark用户讨论别名上问过这个问题。
我的解决方法是打开jar包,找到嵌入的python代码,然后将python代码移动到名为graphframes
的子目录中。
例如,我从主目录运行pyspark
~$ ls -lart
drwxr-xr-x 2 user user 4096 Feb 24 19:55 graphframes
~$ ls graphframes/
__init__.pyc examples.pyc graphframe.pyc tests.pyc
不过,您不需要py文件或jar参数,比如
IPYTHON_OPTS="notebook --no-browser" pyspark --num-executors=4 --name gorelikboris_notebook_1 --packages graphframes:graphframes:0.1.0-spark1.5
将python代码放在graphframes目录中应该可以工作。
将这些行添加到$SPARK_HOME/conf/SPARK-defaults.conf:
spark.executer.extraClassPath文件路径/jar1:file_path/jar2
spark.driver.extraClassPath file_path/jar1:file_path/jar2
在导入"孤立"python文件的更常见情况下(在当前文件夹之外,不是正确安装的包的一部分)-使用addPyFile,例如:
sc.addPyFile('somefolder/graphframe.zip')
addPyFile(路径):为将来要在此SparkContext上执行的所有任务添加一个.py或.zip依赖项。传递的路径可以是本地文件、HDFS中的文件(或其他Hadoop支持的文件系统),也可以是HTTP、HTTPS或FTP URI。