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