【问题标题】:How to load IPython shell with PySpark如何使用 PySpark 加载 IPython shell
【发布时间】:2015-10-29 23:41:42
【问题描述】:

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

【问题讨论】:

标签: python apache-spark ipython pyspark


【解决方案1】:

使用 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

【讨论】:

    【解决方案2】:

    此答案是 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_PYTHONPYSPARK_DRIVER_PYTHON 在 Python 中以编程方式,如下所示:

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

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

    【讨论】:

      【解决方案3】:

      上面提到的答案都不适合我。我总是得到错误:

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

      【讨论】:

      • 这对我有用,运行 amazonlinux 的 docker 映像
      • 对于“.../load-spark-env.sh: No such file or directory”的错误,我刚刚找出了根本原因并进行了修复:github.com/apache/spark/pull/28256
      • 更新:github.com/apache/spark/pull/28957spark 3.0 修复了“.../load-spark-env.sh: No such file or directory”错误。
      【解决方案4】:

      如果 spark 版本 >= 2.0 并且后续配置可能会添加到 .bashrc

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

      【讨论】:

        【解决方案5】:

        我发现编写以特定方式加载 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

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

            【解决方案7】:

            这对我有用:

            # 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
            

            【讨论】:

              【解决方案8】:

              如果您使用 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 替换为您选择的解释器的路径。

              【讨论】:

              • 谢谢。那太神奇了。但是当我尝试定义 sparkContext 时出现此错误:Cannot run multiple SparkContexts at once; existing SparkContext(app=PySparkShell, master=local[*]) created by &lt;module&gt; at /usr/local/lib/python3.4/site-packages/IPython/utils/py3compat.py:116
              • 另外,如何使用特定版本的 python 运行它?它目前正在使用 python3.4 运行它,但我想使用 python2.7 运行它。我问是因为我收到了这个错误: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-shellsparkR 相同)在启动时创建SparkContextSQLContext 实例。您可以分别使用scsqlContext 访问它们。由于 Spark 只允许每个 JVM 使用一个上下文,因此您必须先停止现有的上下文,然后才能创建具有特定选项的新上下文。为此,您只需致电sc.stop()。要选择特定版本的 Python 解释器,您可以使用 PYSPARK_DRIVER_PYTHON
              • 我刚刚读到IPYTHON 变量已贬值,您应该简单地使用PYSPARK_DRIVER_PYTHON=ipython。因此,您可以简单地将ipython 替换为所需版本的路径。
              • 在这种情况下,您可以简单地尝试PYSPARK_DRIVER_PYTHON=ipython2
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-11-29
              • 1970-01-01
              相关资源
              最近更新 更多