rev*_*end 3 python-3.x apache-spark python-3.5 pyspark apache-zeppelin
我试图在Zeppelin中运行pyspark,在Spark 2.1.0中运行python3(3.5).我已经使用python3运行了pyspark shell,但是转到连接到同一本地群集的Zeppelin会给出:
Exception: Python in worker has different version 3.5 than that in driver 2.7, PySpark cannot run with different minor versions
Run Code Online (Sandbox Code Playgroud)
我修改了默认的spark-env.sh,如下所示:(为简洁省略了未修改的行)
SPARK_LOCAL_IP=127.0.0.1
SPARK_MASTER_HOST="localhost"
SPARK_MASTER_WEBUI_PORT=8080
SPARK_MASTER_PORT=7077
SPARK_DAEMON_JAVA_OPTS="-Djava.net.preferIPv4Stack=true"
export PYSPARK_PYTHON=/Library/Frameworks/Python.framework/Versions/3.5/bin/python3
export PYSPARK_DRIVER_PYTHON=/Library/Frameworks/Python.framework/Versions/3.5/bin/ipython
Run Code Online (Sandbox Code Playgroud)
盯着东西./bin/pyspark,一切都很好.
Zeppelin配置已在zeppelin-site.xml中进行了修改,仅将ui端口从8080移至8666."zeppelin-env.sh"已修改如下:(仅显示mods/additions)
export MASTER=spark://127.0.0.1:7077
export SPARK_APP_NAME=my_zeppelin-mf
export PYSPARK_PYTHON=/Library/Frameworks/Python.framework/Versions/3.5/bin/python3
export PYSPARK_DRIVER_PYTHON=/Library/Frameworks/Python.framework/Versions/3.5/bin/ipython
export PYTHONPATH=/Library/Frameworks/Python.framework/Versions/3.5/bin/python3
Run Code Online (Sandbox Code Playgroud)
我尝试过使用Anaconda但是python 3.6目前正在创建Spark的问题.另外,我已经使用了上述配置设置的一堆组合而没有成功.
配置zeppelin.pyspark.python中引用了一个默认设置python但是从文档中不清楚如何/在哪里调整到python3的设置.为了帮助消除OSX细节,我也能够在LinuxMint 18.1上复制这个失败.
所以我一直在搜索Zeppelin文档和互联网,试图找到正确的配置设置让Zeppelin作为3.5驱动程序运行.带着希望,我错过了一些明显的东西,但我似乎无法追踪这一点.希望有人成功完成此任务并帮助识别我的错误.
谢谢.
%pyspark通过Zeppelin UI 设置解释器使用python 3 的正确方法如下(在apache/zeppelin docker容器上测试).
Interpreter菜单项spark口译员zeppelin.pyspark.pythonconfig属性设置为python3SaveRestart右上角的以重新启动解释器您现在可以检查打开Notebook并运行以下代码的python版本:
%pyspark
import sys
sys.version_info
Run Code Online (Sandbox Code Playgroud)
你应该看到像这样的东西作为输出
sys.version_info(major=3, minor=5, micro=2, releaselevel='final', serial=0)
Run Code Online (Sandbox Code Playgroud)
您还必须将PYSPARK_PYTHON和PYSPARK_PYTHON_DRIVER设置为python3(例如使用apache/zeppelin docker容器,假设zeppelin为容器名称):
docker exec -it zeppelin bash
cd /zeppelin/conf
cp zeppelin-env.sh.template zeppelin-env.sh
cat <<EOF >> zeppelin-env.sh
export PYSPARK_PYTHON=python3
export PYSPARK_DRIVER_PYTHON=python3
EOF
# Now, press Ctrl+d to exit the container
docker restart zeppelin
Run Code Online (Sandbox Code Playgroud)
现在一切都设置为使用python3运行pyspark
当然,在发布此内容之后,一些工作正常...
在./conf/interpreter.json的Zeppelin配置中,对于我的一个笔记本,我找到了配置:
"properties": {
...
"zeppelin.pyspark.python": "python",
...
}
Run Code Online (Sandbox Code Playgroud)
将此更改为:
"properties": {
...
"zeppelin.pyspark.python": "python3",
...
}
Run Code Online (Sandbox Code Playgroud)
(Combined with the same settings as above)
使用python 3.5获得了笔记本电脑的预期效果.然而,这似乎有点笨拙/ hacky,我怀疑有一个更优雅的方式来做到这一点.因此,我不会将此称为解决方案/答案,而是更多的解决方案.