【发布时间】:2015-10-29 23:41:42
【问题描述】:
我想加载 IPython shell(不是 IPython notebook),我可以在其中通过命令行使用 PySpark。那可能吗? 我已经安装了 Spark-1.4.1。
【问题讨论】:
-
你可能想试试findspark。
标签: python apache-spark ipython pyspark
我想加载 IPython shell(不是 IPython notebook),我可以在其中通过命令行使用 PySpark。那可能吗? 我已经安装了 Spark-1.4.1。
【问题讨论】:
标签: python apache-spark ipython pyspark
使用 spark 3.0.1 和 python 3.7.7 测试(安装了 ipython/jupyter)
使用 IPython 启动 pyspark:
$ PYSPARK_DRIVER_PYTHON=ipython pyspark
使用 jupyter notebook 启动 pyspark:
$ PYSPARK_DRIVER_PYTHON=jupyter PYSPARK_DRIVER_PYTHON_OPTS=notebook pyspark
【讨论】:
此答案是 similar post my website: https://jupyter.ai/pyspark-session/ 的改编和缩短版本
我使用 ptpython(1),它提供 ipython 功能以及您选择的 vi(1) 或 emacs(1) 键绑定。它还提供动态代码弹出/智能,这在在 CLI 上执行临时 SPARK 工作或只是尝试学习 Spark API 时非常有用。
这是我的 vi 启用 ptpython 会话的样子,注意底部的 VI (INSERT) 模式屏幕截图,以及 ipython 样式提示,表明那些 ptpython 功能已被选中(稍后将详细介绍如何选择它们):
要获得所有这些,请执行以下简单步骤:
user@linux$ pip3 install ptpython # Everything here assumes Python3
user@linux$ vi ${SPARK_HOME}/conf/spark-env.sh
# Comment-out/disable the following two lines. This is necessary because
# they take precedence over any UNIX environment settings for them:
# PYSPARK_PYTHON=/path/to/python
# PYSPARK_DRIVER_PYTHON=/path/to/python
user@linux$ vi ${HOME}/.profile # Or whatever your login RC-file is.
# Add these two lines:
export PYSPARK_PYTHON=python3 # Fully-Qualify this if necessary. (python3)
export PYSPARK_DRIVER_PYTHON=ptpython3 # Fully-Qualify this if necessary. (ptpython3)
user@linux$ . ${HOME}/.profile # Source the RC file.
user@linux$ pyspark
# You are now running pyspark(1) within ptpython; a code pop-up/interactive
# shell; with your choice of vi(1) or emacs(1) key-bindings; and
# your choice of ipython functionality or not.
要选择您的 pypython 首选项(其中有很多),只需在 ptpython 会话中按 F2,然后选择任何你想要的选项。
关闭提示:如果您要提交 Python Spark 应用程序(而不是通过 CLI 与 pyspark(1) 交互,如上所示),只需设置 PYSPARK_PYTHON和 PYSPARK_DRIVER_PYTHON 在 Python 中以编程方式,如下所示:
os.environ['PYSPARK_PYTHON'] = 'python3'
os.environ['PYSPARK_DRIVER_PYTHON'] = 'python3' # Not 'ptpython3' in this case.
我希望这个答案和设置有用。
【讨论】:
上面提到的答案都不适合我。我总是得到错误:
.../pyspark/bin/load-spark-env.sh: No such file or directory
我所做的是启动 ipython 并手动创建 Spark 会话:
from pyspark.sql import SparkSession
spark = SparkSession\
.builder\
.appName("example-spark")\
.config("spark.sql.crossJoin.enabled","true")\
.getOrCreate()
为避免每次都这样做,我将代码移至 ~/.ispark.py 并创建了以下别名(将其添加到 ~/.bashrc):
alias ipyspark="ipython -i ~/.ispark.py"
之后,您可以通过输入以下命令使用 iPython 启动 PySpark:
ipyspark
【讨论】:
如果 spark 版本 >= 2.0 并且后续配置可能会添加到 .bashrc
export PYSPARK_PYTHON=/data/venv/your_env/bin/python
export PYSPARK_DRIVER_PYTHON=/data/venv/your_env/bin/ipython
【讨论】:
我发现编写以特定方式加载 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 拥有的核心数量等,您可以更新此脚本或制作新脚本。正如上面 @zero323 所指出的, PYSPARK_DRIVER_PYTHON= 是 Spark > 1.2 的正确语法 我正在使用 Spark 2.2
【讨论】:
根据官方 Github,IPYTHON=1 在 Spark 2.0+ 中不可用 请改用 PYSPARK_PYTHON 和 PYSPARK_DRIVER_PYTHON。
【讨论】:
这对我有用:
# if you run your ipython with 2.7 version with ipython2
# whatever you use for launching ipython shell should come after '=' sign
export PYSPARK_DRIVER_PYTHON=ipython2
然后从 SPARK_HOME 目录:
./bin/pyspark
【讨论】:
如果您使用 Spark IPYTHON=1 执行 bin/pyspark。
IPYTHON=1 /path/to/bin/pyspark
或
export IPYTHON=1
/path/to/bin/pyspark
虽然上述方法仍然适用于 Spark 1.2 及更高版本,但为这些版本设置 Python 环境的推荐方法是 PYSPARK_DRIVER_PYTHON
PYSPARK_DRIVER_PYTHON=ipython /path/to/bin/pyspark
或
export PYSPARK_DRIVER_PYTHON=ipython
/path/to/bin/pyspark
您可以将ipython 替换为您选择的解释器的路径。
【讨论】:
Cannot run multiple SparkContexts at once; existing SparkContext(app=PySparkShell, master=local[*]) created by <module> at /usr/local/lib/python3.4/site-packages/IPython/utils/py3compat.py:116
Exception: Python in worker has different version 2.7 than that in driver 3.4, PySpark cannot run with different minor versions
pyspark shell(与spark-shell 和sparkR 相同)在启动时创建SparkContext 和SQLContext 实例。您可以分别使用sc 和sqlContext 访问它们。由于 Spark 只允许每个 JVM 使用一个上下文,因此您必须先停止现有的上下文,然后才能创建具有特定选项的新上下文。为此,您只需致电sc.stop()。要选择特定版本的 Python 解释器,您可以使用 PYSPARK_DRIVER_PYTHON。
IPYTHON 变量已贬值,您应该简单地使用PYSPARK_DRIVER_PYTHON=ipython。因此,您可以简单地将ipython 替换为所需版本的路径。
PYSPARK_DRIVER_PYTHON=ipython2