如何启动 pyspark 并进入 ipython shell

Posted

技术标签:

【中文标题】如何启动 pyspark 并进入 ipython shell【英文标题】:How do I launch pyspark and arrive in an ipython shell 【发布时间】:2017-06-27 13:05:50 【问题描述】:

当我启动 pyspark 时,火花正确加载,但是我最终进入了标准的 python shell 环境。

Using Python version 2.7.13 (default, Dec 20 2016 23:05:08)
SparkSession available as 'spark'.
>>>

我想启动 ipython 解释器。

IPython 5.1.0 -- An enhanced Interactive Python.
In [1]:

我该怎么做?我尝试以这种方式修改我的 .bashprofile 并使用别名:

# Spark variables
export SPARK_HOME="/Users/micahshanks/spark-2.1.0-bin-hadoop2.7"
export PYTHONPATH="/Users/micahshanks/spark-2.1.0-bin-hadoop2.7/python/:"

# Spark 2
export PYSPARK_DRIVER_PYTHON=ipython
export PATH=$SPARK_HOME/bin:$PATH
# export PYTHONPATH=$SPARK_HOME/python:$PYTHONPATH

alias sudo='sudo '
alias pyspark="/Users/micahshanks/spark-2.1.0-bin-hadoop2.7/bin/pyspark \
--conf spark.sql.warehouse.dir='file:///tmp/spark-warehouse' \
--packages com.databricks:spark-csv_2.11:1.5.0 \
--packages com.amazonaws:aws-java-sdk-pom:1.10.34 \
--packages org.apache.hadoop:hadoop-aws:2.7.3 \
--packages org.mongodb.spark:mongo-spark-connector_2.10:2.0.0"

我还尝试导航到 pyspark 所在的 spark home 并直接从那里启动,但我再次到达 python 解释器。

我发现这篇文章:How to load IPython shell with PySpark 并且接受的答案看起来很有希望,但是在启动 spark 并以这种方式更改我的 bash 配置文件之前激活 python 2 环境(源激活 py2)尝试使用我的 python 3 启动 spark m 未设置为执行(引发错误)。

我正在使用火花 2.1

【问题讨论】:

PYSPARK_DRIVER_PYTHON=ipython 然后 ./bin/pyspark 加载 ipython 对我有用。通常你输入 ipython 来加载 ipython 但对于 pyspark 你需要输入 ./bin/pyspark @GlenThompson 不幸的是,这对我不起作用。当我在导航到 bin 文件夹后从终端打开 spark 时:.\bin\pyspark 它会在常规 python 解释器中打开。我实际上必须使用sudo pyspark,否则 spark 不会打开,我会收到此错误以及许多其他警告:ERROR 25505: A read-only user or a user in a read-only database is not permitted to disable read-only mode on a connection,但无论哪种方式都不是我想要在 ipython 解释器中打开的结果跨度> 首先我不会导航到bin文件夹,只是在spark下载的根文件夹中,在你解压下载类型export PYSPARK_DRIVER_PYTHON=ipython然后./bin/pyspark但是当我输入sudo ./bin/pyspark我得到你看到的错误和它的全部。现在你破坏了我的:P 上次我通过删除整个目录并按照上面的命令再次解压缩来修复它。 sudo 搞砸了一些东西。抱歉,这没有更多帮助,也许有人知道为什么...... @GlenThompson 成功了!我将不得不深入研究 bash 脚本以找出原因。请注意,我必须在 ./bin/pyspark 之后添加所有配置和包参数,但随后执行了我的 python 脚本。如果你想添加一个正式的答案,我会接受它,如果我能进一步了解它的工作原理,我会在这里发布 实际上以下工作无需重新下载和解压缩 sudo chown -v $(id -un) metastore_db/db.lck sudo ./bin/pyspark 更改 db.lck 文件权限,这会以某种方式影响事情。 【参考方案1】:

Spark 2.1.1

由于某种原因,键入 sudo ./bin/pyspark 会更改 metastore_db/db.lck 的文件权限,导致运行 ipython 和 pyspark 无法工作。从解压后的根目录试试:

sudo chown -v $(id -un) metastore_db/db.lck

export PYSPARK_DRIVER_PYTHON=ipython

./bin/pyspark

另一种解决方案是从spark.apache.org 重新下载并解压缩。导航到解压目录的根目录,然后:

export PYSPARK_DRIVER_PYTHON=ipython

./bin/pyspark

它应该可以工作。

【讨论】:

我尝试在 Ipython 中加载 pyspark 大约 2 天,终于得到了这个超级简单的答案,谢谢!【参考方案2】:

自从提出这个问题后,我发现一个有用的解决方案是编写以特定方式加载 Spark 的 bash 脚本。这样做将为您提供一种在不同环境(例如 ipython 和 jupyter notebook)中启动 Spark 的简单方法。

为此,请打开一个空白脚本(使用您喜欢的任何文本编辑器),例如名为ipython_spark.sh的脚本

对于这个例子,我将提供我用 ipython 解释器打开 spark 的脚本:

#!/bin/bash
export PYSPARK_DRIVER_PYTHON=ipython

$SPARK_HOME/bin/pyspark \
--master local[4] \
--executor-memory 1G \
--driver-memory 1G \
--conf spark.sql.warehouse.dir="file:///tmp/spark-warehouse" \
--packages com.databricks:spark-csv_2.11:1.5.0 \
--packages com.amazonaws:aws-java-sdk-pom:1.10.34 \
--packages org.apache.hadoop:hadoop-aws:2.7.3

请注意,我在我的 bash_profile 中定义了 SPARK_HOME,但您可以将整个路径插入到 pyspark 位于您计算机上的任何位置

我喜欢把所有这样的脚本放在一个地方,所以我把这个文件放在一个名为“scripts”的文件夹中

现在对于这个示例,您需要转到 bash_profile 并输入以下行:

export PATH=$PATH:/Users/<username>/scripts
alias ispark="bash /Users/<username>/scripts/ipython_spark.sh"

这些路径将特定于您放置 ipython_spark.sh 的位置 然后您可能需要更新权限:

$ chmod 711 ipython_spark.sh

并获取您的 bash_profile:

$ source ~/.bash_profile

我使用的是 mac,但这也应该适用于 linux,尽管您很可能会更新 .bashrc 而不是 bash_profile。

我喜欢这种方法的地方在于,您可以编写多个脚本,具有不同的配置并相应地打开 spark。根据您是否正在设置集群、需要加载不同的包或更改 spark 拥有的核心数量等,您可以更新此脚本或制作新脚本。请注意 PYSPARK_DRIVER_PYTHON= 是 Spark > 1.2 的正确语法 我正在使用 Spark 2.2

【讨论】:

以上是关于如何启动 pyspark 并进入 ipython shell的主要内容,如果未能解决你的问题,请参考以下文章

在 ec2 上启动 pyspark Ipython notebook

无法为 pyspark OSX 启动 Jupyter Notebook:IPYTHON 和 IPYTHON_OPTS 在 Spark 2.0+ 中被删除

pyspark - 错误仅出现在 IPython 中,但不在 vanila python 中

Pyspark 连接到 ipython 笔记本中的 Postgres 数据库

入门 - Spark, IPython notebook with pyspark

如何启动 IPython 内核并使用 ZMQ 套接字进行连接?