为什么zeppelin不支持--py-files?

Mee*_*hew 5 python pyspark apache-zeppelin

我有一个python包,其中包含许多内置在.egg文件中的模块,我想在zeppelin笔记本中使用它.根据zeppelin文档,要将此包传递给zeppelin spark解释器,您可以通过conf/zeppelin-env.sh中SPARK_SUBMIT_OPTIONS中的--files选项将其导出.关于此,我有以下问题:

  1. 在pyspark shell中,带有--py-files的.egg文件正在工作(即我能够在pyspark shell中导入包内的模块),而带有--files选项的相同.egg文件不起作用(ImportError) :没有名为XX.xx的模块)

  2. 在zeppelin中的SPARK_SUBMIT_OPTIONS中通过--py-files选项添加.egg文件会导致错误: Error: --py-files given but primary resource is not a Python script. 根据我的理解,SPARK_SUBMIT_OPTIONS中给出的任何内容都会传递给spark-submit命令,但为什么--py-files会抛出错误?

  3. 当我通过SPARK_SUBMIT_OPTIONS中的--files选项添加.egg时,zeppelin笔记本不会抛出错误,但我无法在zeppelin笔记本中导入模块.

传递.egg文件zeppelin spark intrepreter的正确方法是什么?

Spark版本为1.6.2,zeppelin版本为0.6.0

zepplein-env.sh文件包含以下内容:

export SPARK_HOME=/home/me/spark-1.6.1-bin-hadoop2.6
export SPARK_SUBMIT_OPTIONS="--jars /home/me/spark-csv-1.5.0-s_2.10.jar,/home/me/commons-csv-1.4.jar --files /home/me/models/Churn-zeppelin/package/build/dist/fly_libs-1.1-py2.7.egg"
Run Code Online (Sandbox Code Playgroud)

geo*_*art 0

如果你有一个 python 依赖包spark_utils.zip\n包含

\n
src/hdfs_utils.py\n
Run Code Online (Sandbox Code Playgroud)\n

你可以用两种方式使用它

\n

sc.addPyFile

\n
src/hdfs_utils.py\n
Run Code Online (Sandbox Code Playgroud)\n

Spark.submit.pyFiles

\n

另一种方式\xef\xbc\x8c 配置spark.submit.pyFiles

\n
%spark.conf\n\n# python venv\nPYSPARK_PYTHON               /mnt/zeppelin/python-venv/bin/python\nPYSPARK_DRIVER_PYTHON        /mnt/zeppelin/python-venv/bin/python\n\n# dependency\nspark.submit.pyFiles /mnt/zeppelin/python-packages/spark_utils.zip\n
Run Code Online (Sandbox Code Playgroud)\n

你可以像这样使用它:

\n
%pyspark\n\nsc.addPyFile("/mnt/zeppelin/python-packages/spark_utils.zip")\nfrom src.hdfs_utils import get_hdfs_paths, delete_path\n
Run Code Online (Sandbox Code Playgroud)\n
\n

第一次使用动态加载进行开发

\n

第二个在 prod 的配置文件中使用预定义的 pakcage

\n