如何使用 PySpark 加载 IPython shell

How to load IPython shell with PySpark

我想加载 IPython shell(不是 IPython 笔记本),我可以在其中通过命令行使用 PySpark。那可能吗? 我已经安装了 Spark-1.4.1.

如果您使用 Spark < 1.2,您只需使用环境变量 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 替换为您选择的解释器的路径。

以下是对我有用的方法:

# 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

根据官方Github,IPYTHON=1在Spark 2.0+中不可用 请改用 PYSPARK_PYTHON 和 PYSPARK_DRIVER_PYTHON。

https://github.com/apache/spark/blob/master/bin/pyspark

我发现编写 bash 以特定方式加载 Spark 的脚本很有帮助。这样做将为您提供一种在不同环境(例如 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

此答案是 similar post my website: https://jupyter.ai/pyspark-session/

的改编和缩短版本

我使用 ptpython(1),它提供 ipython 功能以及您选择的 vi(1)emacs(1) key-bindings。它还提供动态代码 pop-up/intelligence,这在 CLI 上执行 ad-hoc SPARK 工作时非常有用,或者只是尝试学习 Spark API.

这是我的 vi-enabled ptpython 会话的样子,注意 VI (INSERT)屏幕截图底部的 模式,以及 ipython 样式提示表明那些 ptpython 功能已经 selected(稍后会详细介绍如何 select 它们):

要获得所有这些,请执行以下简单步骤

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.

要 select 您的 python 首选项(还有很多),只需在ptpython 会话,以及 select 您想要的任何选项。

结束语:如果您要提交 Python Spark 应用程序(而不是通过 CLI 与 pyspark(1) 交互,如上所示),只需在 Python 中以编程方式设置 PYSPARK_PYTHONPYSPARK_DRIVER_PYTHON,如下所示:

os.environ['PYSPARK_PYTHON'] = 'python3'
os.environ['PYSPARK_DRIVER_PYTHON'] = 'python3' # Not 'ptpython3' in this case.

我希望这个答案和设置有用。

如果 spark 版本 >= 2.0 并且可以将以下配置添加到 .bashrc

export PYSPARK_PYTHON=/data/venv/your_env/bin/python
export PYSPARK_DRIVER_PYTHON=/data/venv/your_env/bin/ipython

None 提到的答案对我有用。我总是得到错误:

.../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 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