我已经为ipython设置了pyspark,从ipython中,我可以成功导入pyspark。
我在anaconda,python 3.4中使用ipython。这是一个关于问题的快照。
请注意,此命令适用于pyspark
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/__ / .__/\_,_/_/ /_/\_\ version 1.5.2
/_/
Using Python version 2.7.9 (default, Apr 2 2015 15:33:21)
SparkContext available as sc, HiveContext available as sqlContext.
>>> sc.parallelize(range(10), 3)
ParallelCollectionRDD[0] at parallelize at PythonRDD.scala:423
>>>
>>> irdd = sc.parallelize(range(10), 3)
>>> irdd.collect()
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> irdd.glom().collect()
[[0, 1, 2], [3, 4, 5], [6, 7, 8, 9]]
>>>
我已将其配置如下
export SPARK_HOME=$HOME/apps/spark
export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH
export PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.8.2.1-src.zip:$PYTHONPATH
答案 0 :(得分:3)
这里的问题是您在Style.Resources
类上调用parallelize
方法而不是SparkContext
的实例:
在您的IPython笔记本代码中,导入语句
SparkContext
只是将名称from pyspark import SparkContext as sc
提供给SparkContext类,而不是创建新的SparkContext。
有关创建SparkContext实例的说明,请参阅Spark编程指南中的"Initializing Spark"部分。例如,要模拟在sc
中创建的本地上下文,请尝试
spark-shell
答案 1 :(得分:0)
添加Josh的回答: 我遇到了同样的问题,确实将SparkContext导入为sc或只是创建sc = SparkContext与sc = SparkContext()不同。
然而,我被告知我有多个SparkContexts正在运行而且它讨厌我。
我的解决方案是使用:
from pyspark import SparkContext, SparkConf
conf = SparkConf().setAppName("miniProject").setMaster("local[*]")
sc = SparkContext.getOrCreate(conf)
然后当我跑:
sc.parallelize([1, 2, 3, 4, 5, 6, 7, 8, 9, 10],4).map(lambda x: x**2).sum()
我得到了385的预期答案。 因此,关键是getOrCreate方法,因为它可以让您找到现有的上下文并使用它。