【问题标题】:Spark context 'sc' not definedSpark上下文'sc'未定义
【发布时间】:2015-08-26 03:42:38
【问题描述】:

我是 Spark 的新手,我正在尝试通过参考以下站点安装 PySpark。

http://ramhiser.com/2015/02/01/configuring-ipython-notebook-support-for-pyspark/

我尝试安装预构建的包以及通过 SBT 构建 Spark 包。

当我尝试在 IPython Notebook 中运行 python 代码时,出现以下错误。

    NameError                                 Traceback (most recent call last)
   <ipython-input-1-f7aa330f6984> in <module>()
      1 # Check that Spark is working
----> 2 largeRange = sc.parallelize(xrange(100000))
      3 reduceTest = largeRange.reduce(lambda a, b: a + b)
      4 filterReduceTest = largeRange.filter(lambda x: x % 7 == 0).sum()
      5 

      NameError: name 'sc' is not defined

在命令窗口中我可以看到以下错误。

<strong>Failed to find Spark assembly JAR.</strong>
<strong>You need to build Spark before running this program.</strong>

请注意,当我执行 spark-shell 命令时,我得到了一个 scala 提示

更新:

在朋友的帮助下,我可以通过更正 .ipython/profile_pyspark/startup/00-pyspark-setup.py 文件的内容来解决与 Spark 程序集 JAR 相关的问题

我现在只有 Spark Context 变量的问题。更改标题以适当反映我当前的问题。

【问题讨论】:

    标签: apache-spark pyspark jupyter-notebook


    【解决方案1】:

    致异常:Java 网关进程在向驱动程序发送其端口号之前退出

    您需要在您的计算机上安装 Java8。

    【讨论】:

      【解决方案2】:

      在使用 IBM Watson Studio Jupyter notebook 时,我遇到了类似的问题,我通过以下方法解决了它,

      !pip install pyspark
      from pyspark import SparkContext
      sc = SparkContext()
      

      【讨论】:

        【解决方案3】:

        我的 Mac 上的 Spark 是 1.6.0,所以添加 pyspark-shell 并没有解决问题。 对我有用的是遵循@karenyng 给出的here 的答案

        pyspark_submit_args = os.environ.get("PYSPARK_SUBMIT_ARGS", "")
        if not "pyspark-shell" in pyspark_submit_args: pyspark_submit_args += " pyspark-shell"
        os.environ["PYSPARK_SUBMIT_ARGS"] = pyspark_submit_args
        

        【讨论】:

          【解决方案4】:

          这在 spark 版本 2.3.1 中对我有用

          from pyspark import SparkContext
          sc = SparkContext()
          

          【讨论】:

            【解决方案5】:

            您必须创建 SparkContext 的实例,如下所示:

            导入:

            from pyspark import SparkContext
            

            然后:

            sc =SparkContext.getOrCreate()
            

            NB:sc =SparkContext.getOrCreate()sc =SparkContext() 效果更好。

            【讨论】:

            • SparkContext.getOrCreate() 需要解决这个问题,我有。
            【解决方案6】:

            在路径中有 pyspark 后,您需要执行以下操作:

            from pyspark import SparkContext
            sc =SparkContext()
            

            【讨论】:

            • 谢谢维努。当我添加这些行时,我收到以下错误。 C:\Spark\spark-1.3.1-bin-hadoop2.6\python\pyspark\java_gateway.pyc in launch_gateway() 77 callback_socket.close() 78 如果 gateway_port 为 None: ---> 79 raise Exception("Java网关进程在向驱动程序发送其端口号之前退出") 80 81 # 在 Windows 中,确保 Java 子进程在 Python 退出后不会逗留。例外:Java 网关进程在向驱动程序发送其端口号之前退出
            • 不确定那里发生了什么,你能给我更多的上下文
            • 完美,但我认为你可以通过添加一些热情让你的代码看起来更好
            【解决方案7】:

            这个脚本对我有用(在 linux 中):

            #!/bin/bash
            
            export PYSPARK_DRIVER_PYTHON=ipython
            export PYSPARK_DRIVER_PYTHON_OPTS="--pylab -c 'from pyspark import SparkContext; sc=SparkContext()' -i"
            export PYSPARK_SUBMIT_ARGS="--master local[2] pyspark-shell"
            
            pyspark
            

            要调用pyspark,我假设“spark/bin”安装路径位于PATH 变量中。如果没有,请改为致电/path/to/spark/bin/pyspark

            【讨论】:

              【解决方案8】:

              只是一点点改进。在您的 python 脚本文件顶部添加以下内容。

              #! /bin/python
              from pyspark import SparkContext, SparkConf
              sc =SparkContext()
              
              # your code starts here
              

              【讨论】:

                【解决方案9】:

                我在尝试通过 PyCharm 运行 pySpark 时遇到了类似的错误,我在日志中注意到,就在此错误之前,我收到了此错误:

                环境:未找到

                我将此追溯到我没有设置 Java 主环境变量的事实。所以我添加了 os.environ['JAVA_HOME'] = "/usr/java/jdk1.7.0_67-cloudera"

                到我的脚本(我知道这可能不是最好的地方) 然后错误发生了,我创建了我的 spark 对象

                【讨论】:

                  【解决方案10】:

                  在我的案例中我遇到了同样的问题,问题是另一个笔记本正在运行(在最近的版本中,它们以绿色显示)。我选择并关闭了其中一个,它运行良好。

                  很抱歉调用旧线程,但它可能会帮助某人:)

                  【讨论】:

                    【解决方案11】:

                    一种解决方案是将pyspark-shell 添加到shell 环境变量PYSPARK_SUBMIT_ARGS:

                    export PYSPARK_SUBMIT_ARGS="--master local[2] pyspark-shell"
                    

                    python/pyspark/java_gateway.py 发生了变化,如果用户设置了 PYSPARK_SUBMIT_ARGS 变量,则要求 PYSPARK_SUBMIT_ARGS 包含 pyspark-shell

                    【讨论】:

                    • 这是 spark 1.4 的变化吗?可能这就是我启动时 1.4 给我错误但 1.3.1 没有的原因
                    • 是的,从 1.4.x 开始。我想添加 cmets。其实$SPARK_HOME/bin/pyspark有官方方式启动ipython或者ipython notebook。对于 1.4.x,
                    • 您可以使用 $SPARK_HOME/bin/pyspark 启动 ipython 或 ipython 笔记本,检查该 bash 脚本。 PYSPARK_DRIVER_PYTHON=ipython $SPARK_HOME/bin/pyspark PYSPARK_DRIVER_PYTHON=ipython PYSPARK_DRIVER_PYTHON_OPTS='notebook' $SPARK_HOME/bin/pyspark
                    • 恕我直言,这是最好的解决方案。
                    【解决方案12】:

                    我也遇到了Java gateway process exited before sending the driver its port number 错误信息。

                    我可以通过下载为 Hadoop 预构建的版本之一来解决这个问题(我使用的是 hadoop 2.4 版本)。由于我不使用 Hadoop,我不知道为什么这会改变一些东西,但它现在对我来说完美无缺...

                    【讨论】:

                      【解决方案13】:

                      我添加了 Venu 提供的以下行。

                      from pyspark import SparkContext
                      sc =SparkContext()
                      

                      然后通过删除环境变量 PYSPARK_SUBMIT_ARGS 解决了以下后续错误。

                      C:\Spark\spark-1.3.1-bin-hadoop2.6\python\pyspark\java_gateway.pyc in launch_gateway() 77 callback_socket.close() 78 if gateway_port is None: 
                      ---> 79 raise Exception("Java gateway process exited before sending the driver its port number") 
                      80 
                      81 # In Windows, ensure the Java child processes do not linger after Python has exited. Exception: Java gateway process exited before sending the driver its port number
                      

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2018-09-26
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多