如何使用 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。
我发现编写 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_PYTHON 和 PYSPARK_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
我想加载 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。
我发现编写 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_PYTHON 和 PYSPARK_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