我正在尝试运行非常基本的Spark + Python pyspark教程 - 请参阅http://spark.apache.org/docs/0.9.0/quick-start.html
当我尝试初始化一个新的SparkContext时,
from pyspark import SparkContext sc = SparkContext("local[4]", "test")
我收到以下错误:
ValueError: Cannot run multiple SparkContexts at once
我想知道我以前尝试运行示例代码是否会将某些内容加载到内存中并且无法清除.有没有办法列出已经在内存中的当前SparkContexts和/或清除它们以便运行示例代码?
这是因为当您在终端中键入"pyspark"时,系统会自动初始化SparkContext(可能是一个Object?),因此您应该在创建新的之前停止它.
您可以使用
sc.stop()
在创建新的SparkContext之前.
另外,你可以使用
sc = SparkContext.getOrCreate()
代替
sc = SparkContext()
我是Spark的新手,我不太了解SparkContext()函数参数的含义,但上面显示的代码对我来说都很有用.
事实证明,以交互方式运行./bin/pyspark自动加载SPARKCONTEXT.这是我开始使用pyspark时看到的内容:
Welcome to ____ __ / __/__ ___ _____/ /__ _\ \/ _ \/ _ `/ __/ '_/ /__ / .__/\_,_/_/ /_/\_\ version 0.9.1 /_/ Using Python version 2.6.6 (r266:84292, Feb 22 2013 00:00:18) Spark context available as sc.
...所以你可以在开头运行"del sc",或者继续使用"sc"作为自动定义.
该示例的另一个问题是它看起来像是查看常规的NFS文件系统位置,而它实际上是在尝试查看Hadoop的HDFS文件系统.在运行代码之前,我必须使用"hadoop fs -put README.md README.md"在$ SPARK_HOME位置上传README.md文件.
这是我以交互方式运行的修改示例程序:
from pyspark import SparkContext logFile = "README.md" 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)
这是独立python文件的修改版本:
"""SimpleApp.py""" from pyspark import SparkContext logFile = "README.md" # Should be some file on your system 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/pyspark SimpleApp.py执行
在尝试创建另一个SparkContext之前,您是否尝试过使用sc.stop()?