Jupyter pyspark:没有名为pyspark的模块。

9

谷歌上有很多解决这个问题的方案,但不幸的是,即使尝试了所有可能性,我仍然无法使其正常工作,请耐心等待并查看是否有灵感。

操作系统:MAC

Spark:1.6.3(2.10)

Jupyter Notebook:4.4.0

Python:2.7

Scala:2.12.1

我成功安装并运行了Jupyter笔记本。接下来,我尝试配置它与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命令行界面可以导入'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笔记本并创建SparkContext时,我可以看到spark-assembly、py4j和pyspark包从本地上传,但是在调用操作时,某种方式下找不到pyspark。
6个回答

6
使用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上使用以下命令将pyspark链接到jupyter。
在*nix上,请使用export而不是set 在CMD/命令提示符中输入下面的代码
set PYSPARK_DRIVER_PYTHON=ipython
set PYSPARK_DRIVER_PYTHON_OPTS=notebook
pyspark

1
这不是使用Jupyter,只是ipython。 - OneCricketeer
当您执行这些命令时,它将在浏览器中打开Jupyter笔记本。据我所知,Jupyter笔记本在后台使用IPython。如果我错了,请纠正我,因为我已经使用过这个命令。 - furianpandit
根据我的经验,(至少此处的第一行和第三行)将停留在终端并为Pyspark提供一个ipython提示符。 - OneCricketeer
是的,你说得对。实际上,我在第二行提到的“notebook”指的是浏览器上的Jupyter Notebook。 - furianpandit
明白了...不管怎样,Apache Toree的安装也会设置这个。 - OneCricketeer

1
你只需要添加:

import os

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

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

0
  1. 创建一个虚拟环境并安装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
    

0
我们在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笔记本电获得令牌。


0

使用:

  • 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 是一种非常不好的做法,这可能会在下游创建严重的问题(例如当尝试使用spark-submit )。 - desertnaut

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接