不好意思。今天我想运行一个程序,是关于如何在Pyspark中使用sqlContext创建DataFrame的。结果是一个AttributeError,是“AttributeError:'NoneType' object has no attribute 'sc'”我的电脑是win7,spark的版本是1.6.0,API是python3。我google了好几次,看了Spark Python的API教程,都解决不了问题。所以我找你帮忙。
我的代码是:
#python version is 3.5
sc.stop()
import pandas as pd
import numpy as np
sc=SparkContext("local","app1"
data2=[("a",5),("b",5),("a",5)]
df=sqlContext.createDataFrame(data2)
字符串
结果是:
AttributeError Traceback (most recent call last)
<ipython-input-19-030b8faadb2c> in <module>()
5 data2=[("a",5),("b",5),("a",5)]
6 print(data2)
----> 7 df=sqlContext.createDataFrame(data2)
D:\spark\spark-1.6.0-bin-hadoop2.6\python\pyspark\sql\context.py in createDataFrame(self, data, schema, samplingRatio)
426 rdd, schema = self._createFromRDD(data, schema, samplingRatio)
427 else:
--> 428 rdd, schema = self._createFromLocal(data, schema)
429 jrdd = self._jvm.SerDeUtil.toJavaArray(rdd._to_java_object_rdd())
430 jdf = self._ssql_ctx.applySchemaToPythonRDD(jrdd.rdd(), schema.json())
D:\spark\spark-1.6.0-bin-hadoop2.6\python\pyspark\sql\context.py in _createFromLocal(self, data, schema)
358 # convert python objects to sql data
359 data = [schema.toInternal(row) for row in data]
--> 360 return self._sc.parallelize(data), schema
361
362 @since(1.3)
D:\spark\spark-1.6.0-bin-hadoop2.6\python\pyspark\context.py in parallelize(self, c, numSlices)
410 [[], [0], [], [2], [4]]
411 """
--> 412 numSlices = int(numSlices) if numSlices is not None else self.defaultParallelism
413 if isinstance(c, xrange):
414 size = len(c)
D:\spark\spark-1.6.0-bin-hadoop2.6\python\pyspark\context.py in defaultParallelism(self)
346 reduce tasks)
347 """
--> 348 return self._jsc.sc().defaultParallelism()
349
350 @property
AttributeError: 'NoneType' object has no attribute 'sc'
型
我很困惑,我已经创建了“sc”,事实上,为什么它显示“'NoneType'对象没有属性'sc'”的错误?
3条答案
按热度按时间pb3skfrl1#
这应该可以工作(除了在代码中,你在sc创建的最后缺少一个')',我想这是一个类型)。你可以尝试创建sc如下:
字符串
顺便说一句,sc.stop意味着你已经有了一个spark上下文,如果你使用pyspark,则为true,但如果你使用spark-submit,则为true。最好使用SparkContext.getOrCreate,它在两种情况下都有效。
uqdfh47h2#
这里有一个对我有用的最小示例。我不确定,如果你后来没有使用它,为什么你首先导入pandas。我猜你的意图是从pandas对象创建DataFrame。因此,这里有一个从pandas-DataFrame生成spark-DataFrame的示例。
字符串
我也在一个jupyter笔记本上运行spark。
cu6pst1q3#
我相信我们会得到错误“AttributeError:'NoneType' object has no attribute 'sc'”,因为我们同时运行两个SparkContexts。
SparkContext表示与Spark群集的连接,可用于在该群集上创建RDD和广播变量。
也
“每个JVM只能有一个SparkContext处于活动状态。在创建新的SparkContext之前,必须使用stop()方法来处理活动的SparkContext。SparkContext示例不支持在多个进程之间共享,PySpark也不保证多进程执行。请使用线程来实现并发处理。”
根据我的经验,当我重新启动我的juypter kernal并且只运行一个SparkContext时,这个错误就解决了。我希望这能帮助其他人得到同样的错误。
数据来源:https://spark.apache.org/docs/latest/api/python/reference/api/pyspark.SparkContext.html