如何启动 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 数据库