Spark 上下文 'sc' 未定义

Spark context 'sc' not defined

我是 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

在命令window中我可以看到下面的错误。

<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变量的问题。更改标题以适当反映我当前的问题。

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

from pyspark import SparkContext
sc =SparkContext()

我添加了 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

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

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

一种解决方案是将 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

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

抱歉调用旧线程,但它可能对某人有所帮助:)

我的 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

我在尝试通过 PyCharm 让 pySpark 工作时遇到了类似的错误,我注意到在日志中,就在这个错误之前我遇到了这个错误:

环境:未找到

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

我的脚本(我知道这可能不是最好的地方) 错误出现,我创建了我的 spark 对象

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

#! /bin/python
from pyspark import SparkContext, SparkConf
sc =SparkContext()

# your code starts here

这个脚本对我有用(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.

您必须像下面这样创建 SparkContext 的实例:

进口:

from pyspark import SparkContext

然后:

sc =SparkContext.getOrCreate()

注意:sc =SparkContext.getOrCreate() 效果比 sc =SparkContext().

这在 spark 版本 2.3.1 中对我有用

from pyspark import SparkContext
sc = SparkContext()

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

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

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

您需要在计算机中安装 Java8。