ipython pyspark 'range' 对象没有属性 'defaultParallelism'

ipython pyspark 'range' object has no attribute 'defaultParallelism'

我已经为 ipython 设置了 pyspark,并且在 ipython 中,我可以成功导入 pyspark。

我在 anaconda 中使用 ipython,python 3.4。这是问题的快照。

请注意,此命令适用于 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

这里的问题是您在 SparkContext class 上调用 parallelize 方法而不是 SparkContext:

的实例

在您的 IPython 笔记本代码中,导入语句

from pyspark import SparkContext as sc

只是将名称 sc 赋予 SparkContext class,而不是创建新的 SparkContext。

有关创建 SparkContext 实例的说明,请参阅 Spark 编程指南中的 "Initializing Spark" 部分。例如,要模拟在 spark-shell 中创建的本地上下文,请尝试

from pyspark import SparkContext, SparkConf
conf = SparkConf().setAppName("app-name-of-your-choice").setMaster("local[*]")
sc = SparkContext(conf=conf)
# Your code here

添加到 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 方法,因为它可以让您找到现有的上下文并使用它。