【问题标题】:Jupyter pyspark : no module named pysparkJupyter pyspark:没有名为 pyspark 的模块
【发布时间】:2017-02-03 17:52:30
【问题描述】:

Google 确实为这个问题提供了大量的解决方案,但不幸的是,即使在尝试了所有可能性之后,仍然无法使其正常工作,所以请耐心等待,看看是否有什么让你印象深刻的事情。

操作系统:MAC

火花:1.6.3 (2.10)

Jupyter 笔记本:4.4.0

Python:2.7

斯卡拉:2.12.1

我能够成功安装并运行 Jupyter notebook。接下来,我尝试将其配置为与 Spark 一起使用,为此我使用 Apache Toree 安装了 spark 解释器。现在,当我尝试在笔记本中运行任何 RDD 操作时,会引发以下错误

Error from python worker:
  /usr/bin/python: No module named pyspark
PYTHONPATH was:
  /private/tmp/hadoop-xxxx/nm-local-dir/usercache/xxxx/filecache/33/spark-assembly-1.6.3-hadoop2.2.0.jar

已经尝试过的方法: 1.在.bash_profile中设置PYTHONPATH 2.能够在本地的python-cli中导入'pyspark' 3. 已尝试更新解释器 kernel.json 以跟随

{
  "language": "python",
  "display_name": "Apache Toree - PySpark",
  "env": {
    "__TOREE_SPARK_OPTS__": "",
    "SPARK_HOME": "/Users/xxxx/Desktop/utils/spark",
    "__TOREE_OPTS__": "",
    "DEFAULT_INTERPRETER": "PySpark",
    "PYTHONPATH": "/Users/xxxx/Desktop/utils/spark/python:/Users/xxxx/Desktop/utils/spark/python/lib/py4j-0.9-src.zip:/Users/xxxx/Desktop/utils/spark/python/lib/pyspark.zip:/Users/xxxx/Desktop/utils/spark/bin",
  "PYSPARK_SUBMIT_ARGS": "--master local --conf spark.serializer=org.apache.spark.serializer.KryoSerializer",
    "PYTHON_EXEC": "python"
  },
  "argv": [
    "/usr/local/share/jupyter/kernels/apache_toree_pyspark/bin/run.sh",
    "--profile",
    "{connection_file}"
  ]
}
  1. 甚至更新了解释器 run.sh 以显式加载 py4j-0.9-src.zip 和 pyspark.zip 文件。打开 PySpark notebook 并创建 SparkContext 时,我可以看到从本地上传的 spark-assembly、py4j 和 pyspark 包,但仍然在调用操作时,不知何故找不到 pyspark。

【问题讨论】:

    标签: python ipython pyspark jupyter apache-toree


    【解决方案1】:

    使用 findspark 库绕过所有环境设置过程。这是更多信息的链接。 https://github.com/minrk/findspark

    如下使用。

    import findspark
    findspark.init('/path_to_spark/spark-x.x.x-bin-hadoopx.x')
    from pyspark.sql import SparkSession
    

    【讨论】:

      【解决方案2】:

      我在 Windows 中尝试了以下命令来链接 jupyter 上的 pyspark。

      在 *nix 上,使用 export 而不是 set

      在 CMD/命令提示符中输入以下代码

      set PYSPARK_DRIVER_PYTHON=ipython
      set PYSPARK_DRIVER_PYTHON_OPTS=notebook
      pyspark
      

      【讨论】:

      • 这不是使用 Jupyter,只有 ipython
      • 当你执行这个命令时,它会在浏览器中打开 jupyter notebook。据我了解,jupyter notebook 在后台使用 ipython。如果我错了,请纠正我,因为我已经使用过这个命令
      • 根据我的经验,(至少这里的第一行和第三行)将留在终端并为您提供 Pyspark 的 ipython 提示
      • 是的,你是对的,实际上第二行我提到了在浏览器上通向 jupyter notebook 的笔记本。
      • 知道了...无论如何,Apache Toree 安装也设置了这个
      【解决方案3】:

      只需要添加:

      import os
      
      os.environ['PYSPARK_SUBMIT_ARGS'] = 'pyspark-shell'
      

      之后,您就可以正常使用 Pyspark 了。

      【讨论】:

        【解决方案4】:

        使用:

        • ubuntu 16.04 lts
        • spark-2.2.0-bin-hadoop2.7
        • anaconda Anaconda3 4.4.0 (python3)

        将以下内容添加到 .bashrc(相应地调整您的 SPARK_HOME 路径):

        export SPARK_HOME=/home/gps/spark/spark-2.2.0-bin-hadoop2.7
        export PATH=$SPARK_HOME/bin:$PATH
        export PYSPARK_DRIVER_PYTHON=jupyter
        export PYSPARK_DRIVER_PYTHON_OPTS='notebook'
        

        然后在终端窗口中运行(相应地调整路径):

        $ /home/gps/spark/spark-2.2.0-bin-hadoop2.7/bin/pyspark 
        

        这将在启用 pyspark 的情况下启动 Jupyter Notebook

        【讨论】:

        • PYSPARK_DRIVER_PYTHON 设置为ipythonjupyter 是一种非常糟糕 的做法,它会在下游产生严重的问题(例如when trying spark-submit)。
        【解决方案5】:
        1. 创建一个 virtualenv 并安装 pyspark
        2. 然后设置内核

           python -m ipykernel install --user --name your_venv_name --display-name "display_name_in_kernal_list"
          
        3. 启动笔记本

        4. 使用下拉菜单更改内核

              Kernel >> Change Kernel >> list of kernels
          

        【讨论】:

          【解决方案6】:

          我们在我们拥有 jupyter 的路径中创建一个文件 startjupyter.sh 并保持该文件中的所有环境设置如上所述

          export SPARK_HOME=/home/gps/spark/spark-2.2.0-bin-hadoop2.7
          export PATH=$SPARK_HOME/bin:$PATH
          export PYSPARK_DRIVER_PYTHON=jupyter
          export PYSPARK_DRIVER_PYTHON_OPTS='notebook'
          

          给出错误路径和日志文件。 您还可以提供要执行笔记本的端口号。 保存文件并执行 ./startjupyter.sh 检查 Jupyter.err 文件,它将提供令牌以通过 url 在线访问 Jupyter notebook。

          【讨论】:

            猜你喜欢
            • 2016-11-23
            • 1970-01-01
            • 2021-01-18
            • 2020-03-15
            • 2018-10-03
            • 1970-01-01
            • 1970-01-01
            • 2022-08-31
            • 2015-01-11
            相关资源
            最近更新 更多