pyspark AttributeError:'NoneType'对象没有属性'sc'

4bbkushb  于 2023-11-16  发布在  Spark
关注(0)|答案(3)|浏览(195)

不好意思。今天我想运行一个程序,是关于如何在Pyspark中使用sqlContext创建DataFrame的。结果是一个AttributeError,是“AttributeError:'NoneType' object has no attribute 'sc'”我的电脑是win7,spark的版本是1.6.0,API是python3。我google了好几次,看了Spark Python的API教程,都解决不了问题。所以我找你帮忙。
我的代码是:

  1. #python version is 3.5
  2. sc.stop()
  3. import pandas as pd
  4. import numpy as np
  5. sc=SparkContext("local","app1"
  6. data2=[("a",5),("b",5),("a",5)]
  7. df=sqlContext.createDataFrame(data2)

字符串
结果是:

  1. AttributeError Traceback (most recent call last)
  2. <ipython-input-19-030b8faadb2c> in <module>()
  3. 5 data2=[("a",5),("b",5),("a",5)]
  4. 6 print(data2)
  5. ----> 7 df=sqlContext.createDataFrame(data2)
  6. D:\spark\spark-1.6.0-bin-hadoop2.6\python\pyspark\sql\context.py in createDataFrame(self, data, schema, samplingRatio)
  7. 426 rdd, schema = self._createFromRDD(data, schema, samplingRatio)
  8. 427 else:
  9. --> 428 rdd, schema = self._createFromLocal(data, schema)
  10. 429 jrdd = self._jvm.SerDeUtil.toJavaArray(rdd._to_java_object_rdd())
  11. 430 jdf = self._ssql_ctx.applySchemaToPythonRDD(jrdd.rdd(), schema.json())
  12. D:\spark\spark-1.6.0-bin-hadoop2.6\python\pyspark\sql\context.py in _createFromLocal(self, data, schema)
  13. 358 # convert python objects to sql data
  14. 359 data = [schema.toInternal(row) for row in data]
  15. --> 360 return self._sc.parallelize(data), schema
  16. 361
  17. 362 @since(1.3)
  18. D:\spark\spark-1.6.0-bin-hadoop2.6\python\pyspark\context.py in parallelize(self, c, numSlices)
  19. 410 [[], [0], [], [2], [4]]
  20. 411 """
  21. --> 412 numSlices = int(numSlices) if numSlices is not None else self.defaultParallelism
  22. 413 if isinstance(c, xrange):
  23. 414 size = len(c)
  24. D:\spark\spark-1.6.0-bin-hadoop2.6\python\pyspark\context.py in defaultParallelism(self)
  25. 346 reduce tasks)
  26. 347 """
  27. --> 348 return self._jsc.sc().defaultParallelism()
  28. 349
  29. 350 @property
  30. AttributeError: 'NoneType' object has no attribute 'sc'


我很困惑,我已经创建了“sc”,事实上,为什么它显示“'NoneType'对象没有属性'sc'”的错误?

pb3skfrl

pb3skfrl1#

这应该可以工作(除了在代码中,你在sc创建的最后缺少一个')',我想这是一个类型)。你可以尝试创建sc如下:

  1. conf = SparkConf().setAppName("app1").setMaster("local")
  2. sc = SparkContext(conf=conf)

字符串
顺便说一句,sc.stop意味着你已经有了一个spark上下文,如果你使用pyspark,则为true,但如果你使用spark-submit,则为true。最好使用SparkContext.getOrCreate,它在两种情况下都有效。

uqdfh47h

uqdfh47h2#

这里有一个对我有用的最小示例。我不确定,如果你后来没有使用它,为什么你首先导入pandas。我猜你的意图是从pandas对象创建DataFrame。因此,这里有一个从pandas-DataFrame生成spark-DataFrame的示例。

  1. import pandas as pd
  2. from pyspark import SQLContext
  3. df = pd.DataFrame({'x': [1, 2, 3]})
  4. sc = SparkContext.getOrCreate()
  5. sqlContext = SQLContext(sc)
  6. sqlContext.createDataFrame(df)

字符串
我也在一个jupyter笔记本上运行spark。

cu6pst1q

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

相关问题