pyspark NameError:未定义全局名称“accumulators”

时间:2016-08-15 04:02:05

标签: apache-spark pyspark

我按照quick start教程进行了操作。

我的脚本是

from pyspark import SparkContext

logFile = 'README.md'
sc = SparkContext('local', 'Simple App')
logData = sc.textFile(logFile).cache()

numAs = logData.filter(lambda s: 'a' in s).count()
numBs = logData.filter(lambda s: 'b' in s).count()

print 'Lines with a: %i, lines with b: %i' % (numAs, numBs)

我在命令行上运行了脚本

$SPARK_HOME/bin/spark-submit --master local[2]  SimpleApp.py
  

追踪(最近的呼叫最后):
  文件“/home/huayu/Programs/Machine_learning/spark_exe/quick_start/SimpleApp.py”,第4行,在       sc = SparkContext('local','Simple App')
  在 init 中输入文件“/home/huayu/Downloads/Software/spark/python/pyspark/context.py”,第115行       conf,jsc,profiler_cls)
  在_do_init中输入文件“/home/huayu/Downloads/Software/spark/python/pyspark/context.py”,第174行       self._accumulatorServer = accumulators._start_update_server()
  NameError:未定义全局名称'accumulators'

当我运行python SimpleApp.py时,它运行正常。

我从https://github.com/GUG11/spark(版本2.1.0)获得Spark,并使用python 2.7.12。

还有另一个与Spark累加器有关的问题,但我的问题中的错误信息是不同的。 pyspark ImportError: cannot import name accumulators

1 个答案:

答案 0 :(得分:0)

您确实没有添加 getOrCreate(),它实际上创建了 Spark 上下文/会话 在 2021 年,您更愿意使用 Spark 会话而不是 Spark 上下文,因为现在可以在同一链接上找到它http://spark.apache.org/docs/latest/quick-start.html#self-contained-applications

"""SimpleApp.py"""
from pyspark.sql import SparkSession

logFile = "YOUR_SPARK_HOME/README.md"  # Should be some file on your system
spark = SparkSession.builder.appName("SimpleApp").getOrCreate()
logData = spark.read.text(logFile).cache()

numAs = logData.filter(logData.value.contains('a')).count()
numBs = logData.filter(logData.value.contains('b')).count()

print("Lines with a: %i, lines with b: %i" % (numAs, numBs))

spark.stop()