当前位置: 首页 > 知识库问答 >
问题:

配置Spark与Jupyter笔记本和Anaconda一起使用

田巴英
2023-03-14

我已经花了几天的时间试图用我的Jupyter笔记本和Anaconda让Spark工作。这是我的想法。bash_html" target="_blank">配置文件看起来像:

PATH="/my/path/to/anaconda3/bin:$PATH"

export JAVA_HOME="/my/path/to/jdk"
export PYTHON_PATH="/my/path/to/anaconda3/bin/python"
export PYSPARK_PYTHON="/my/path/to/anaconda3/bin/python"

export PATH=$PATH:/my/path/to/spark-2.1.0-bin-hadoop2.7/bin
export PYSPARK_DRIVER_PYTHON=jupyter
export PYSPARK_DRIVER_PYTHON_OPTS="notebook" pyspark
export SPARK_HOME=/my/path/to/spark-2.1.0-bin-hadoop2.7
alias pyspark="pyspark --conf spark.local.dir=/home/puifais --num-executors 30 --driver-memory 128g --executor-memory 6g --packages com.databricks:spark-csv_2.11:1.5.0"

当我键入/my/path/to/spark-2.1.0-bin-hadoop2时。7/bin/spark shell,我可以在命令行shell中很好地启动spark。并且输出sc不是空的。它似乎工作得很好。

当我键入pyspark,它启动我的Jupyter笔记本罚款。当我创建一个新的Python3笔记本时,会出现以下错误:

[IPKernelApp] WARNING | Unknown error in handling PYTHONSTARTUP file /my/path/to/spark-2.1.0-bin-hadoop2.7/python/pyspark/shell.py: 

sc在我的Jupyter笔记本是空的。

有人能帮助解决这个问题吗?

只是想澄清一下:冒号后面没有任何错误。我还试着用这篇文章创建我自己的启动文件,我在这里引用,这样你就不必去看了:

我创建了一个简短的初始化脚本init_spark.py如下:

from pyspark import SparkConf, SparkContext
conf = SparkConf().setMaster("yarn-client")
sc = SparkContext(conf = conf)

然后把它放在~/。ipython/profile\u默认值/startup/directory

当我这样做时,错误变成:

[IPKernelApp] WARNING | Unknown error in handling PYTHONSTARTUP file /my/path/to/spark-2.1.0-bin-hadoop2.7/python/pyspark/shell.py:
[IPKernelApp] WARNING | Unknown error in handling startup files:

共有3个答案

柳梓
2023-03-14

我刚刚安装了火花魔术(在重新安装了一个较新版本的火花)。

我认为单凭这一点就可以了,而且比手工修改配置文件要简单得多。

叶翰林
2023-03-14

Conda可以帮助正确管理许多依赖项。。。

安装火花。假设spark安装在/opt/spark中,请将其包含在~/中。bashrc:

export SPARK_HOME=/opt/spark
export PATH=$SPARK_HOME/bin:$PATH

创建一个conda环境,其中包含除Spark之外的所有需要的依赖项:

conda create -n findspark-jupyter-openjdk8-py3 -c conda-forge python=3.5 jupyter=1.0 notebook=5.0 openjdk=8.0.144 findspark=1.1.0

激活环境

$ source activate findspark-jupyter-openjdk8-py3

启动Jupyter笔记本服务器:

$ jupyter notebook

在浏览器中,创建一个新的Python3笔记本

尝试使用以下脚本计算PI(借用此脚本)

import findspark
findspark.init()
import pyspark
import random
sc = pyspark.SparkContext(appName="Pi")
num_samples = 100000000
def inside(p):     
  x, y = random.random(), random.random()
  return x*x + y*y < 1
count = sc.parallelize(range(0, num_samples)).filter(inside).count()
pi = 4 * count / num_samples
print(pi)
sc.stop()
杜嘉木
2023-03-14

嗯,看到蹩脚的黑客,比如设置PYSPARK_DRIVER_PYTHON=jupyter,已经被提升为“解决方案”,现在往往成为标准实践,我真的很痛苦,尽管它们显然会导致丑陋的结果,比如键入pyspark最后得到的是一个Jupyter笔记本,而不是PySpark外壳,加上潜伏在下游的尚未发现的问题,例如当你试图使用上面的设置使用火花提交时...:(

(别误会我的意思,这不是你的错,我也不是在责怪你;我在这里看到了几十篇文章,其中提出、接受并投票支持了这个“解决方案”。)。

在撰写本文时(2017年12月),有一个也是唯一一个合适的方法来定制Jupyter笔记本,以便与其他语言一起工作(PySpark在这里),这就是Jupyter内核的使用。

要做的第一件事是运行jupyter kernelspec list命令,以获取机器中任何已可用内核的列表;以下是我的案例(Ubuntu)的结果:

$ jupyter kernelspec list
Available kernels:
  python2       /usr/lib/python2.7/site-packages/ipykernel/resources
  caffe         /usr/local/share/jupyter/kernels/caffe
  ir            /usr/local/share/jupyter/kernels/ir
  pyspark       /usr/local/share/jupyter/kernels/pyspark
  pyspark2      /usr/local/share/jupyter/kernels/pyspark2
  tensorflow    /usr/local/share/jupyter/kernels/tensorflow

第一个内核,python2,是IPython自带的默认内核(很有可能这是你系统中唯一的内核);至于其余的,我还有2个Python内核(caffe

上面列表的条目是目录,每个目录都包含一个名为kernel的文件。json。让我们看看我的pyspark2内核的这个文件的内容:

{
 "display_name": "PySpark (Spark 2.0)",
 "language": "python",
 "argv": [
  "/opt/intel/intelpython27/bin/python2",
  "-m",
  "ipykernel",
  "-f",
  "{connection_file}"
 ],
 "env": {
  "SPARK_HOME": "/home/ctsats/spark-2.0.0-bin-hadoop2.6",
  "PYTHONPATH": "/home/ctsats/spark-2.0.0-bin-hadoop2.6/python:/home/ctsats/spark-2.0.0-bin-hadoop2.6/python/lib/py4j-0.10.1-src.zip",
  "PYTHONSTARTUP": "/home/ctsats/spark-2.0.0-bin-hadoop2.6/python/pyspark/shell.py",
  "PYSPARK_PYTHON": "/opt/intel/intelpython27/bin/python2"
 }
}

我没有费心将我的详细信息更改为/my/path/to等。,您已经可以看到我们的案例之间有一些差异(我使用英特尔Python 2.7,而不是Anaconda Python 3),但希望您明白这个想法(BTW,不要担心connection_file-我也不使用)。

现在,最简单的方法是手动对上面显示的内核进行必要的更改(仅路径),并将其保存在的新子文件夹中/jupyter/kernels目录(这样,如果再次运行jupyter-kernelspec-list命令,它应该是可见的)。如果您认为这种方法也是一种黑客行为,那么我同意您的看法,但它是Jupyter文档(第12页)中推荐的方法:

然而,没有一个很好的方法来修改kernelspec。一种方法使用jupyter kernelspec list查找内核。json文件,然后对其进行修改,例如kernels/python3/kernel。json,手工制作。

/jupyter/kernels文件夹,您仍然可以使用jupyter kernelspec安装安装新内核-还没有尝试过,但看看这个SO答案。

最后,不要忘记从bash概要文件中删除所有与PySpark相关的环境变量(只保留SPARK\u HOME应该可以)。并确认,当您键入pyspark时,您会发现自己有一个pyspark外壳,而不是一个Jupyter笔记本。。。

更新(注释后):如果要将命令行参数传递给PySpark,应在env下添加PySpark\u SUBMIT\u ARGS设置;例如,下面是Spark 1.6.0内核文件的最后一行,我们仍然需要使用外部Spark csv包来读取csv文件:

"PYSPARK_SUBMIT_ARGS": "--master local --packages com.databricks:spark-csv_2.10:1.4.0 pyspark-shell"
 类似资料:
  • 我试图在Mac上的Jupyter笔记本电脑中安装和使用R中的xlsx lackage。 好像跑的还行但是 结果如下: 我尝试了sudo R CMD javareconf,结果是: Java解释器: /usr/bin/javaJava版本:13.0.2Java主路径: /Library/Java /JavaVirtualMachines/adoptopenjdk-13-openj9.jdk/Cont

  • 我有一个外部自定义罐子,我想与Azure HDInsight Jupyter笔记本一起使用;HDI中的Jupyter笔记本使用Spark Magic和Livy。 在笔记本的第一个单元格中,我尝试使用配置: 但我收到的错误消息是: 我想知道我是否只是不明白Livy在这种情况下是如何工作的,因为我能够成功地在同一个集群中包含一个spark-package(GraphFrames): null

  • 我有一台安装了Hadoop和Spark的机器。下面是我目前的环境。 Python3.6 /root/.ipython/profile_pyspark/startup/00-pyspark-setup.py /root/anaconda3/share/jupyter/kernels/pyspark/kernel.json kernel.json 所以,由于sc无法初始化,如果我想运行以下操作,它失败

  • 连接到Spark:pyspark_driver_python=/usr/local/bin/jupyter pyspark_driver_python_opts=“notebook--no-browser--port=7777”pyspark--packages com.databricks:spark-csv2.10:1.1.0--master spark://127.0.0.1:7077--e

  • 我有两条蟒蛇。基本测试环境和我的测试环境名为。此环境可以正常工作,例如PyCharm IDE。 当通过发出myscripts/notebooks直接从图中目录启动jupyter服务器时,我的脚本/笔记本会抱怨缺少软件包。 这说明它使用的是环境,而不是我的环境。但正如屏幕截图所示,它不是被激活的。 所以问题是:如何设置jupyter使用的虚拟环境? 使用的版本: Windows 10 Pro x64

  • 问题内容: 我正在研究Jupyter Notebook,并希望通过使用Google GPU使其运行更快。我已经进行了一些研究并找到了解决方案,但是它对我没有用。 解决方案是: “最简单的方法是使用Connect to Local Runtime, 然后选择硬件加速器作为GPU,如Google Colab Free GPU Tutorial中所示 。” 我确实设法将googe colab连接到jup