【问题标题】:AttributeError: 'NoneType' object has no attribute 'sc'AttributeError:“NoneType”对象没有属性“sc”
【发布时间】:2016-11-28 07:59:32
【问题描述】:

对不起。今天我想运行一个程序,介绍如何在 Pyspark 中使用 sqlContext 创建 DataFrame。结果是 AttributeError,即“AttributeError: 'NoneType' object has no attribute 'sc'” 我的电脑是win7,spark的版本是1.6.0,API是python3。我google了好几次,看了Spark Python API Docs,都没有解决问题,所以求助。

我的代码是:

   #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'”的错误?

【问题讨论】:

  • 你为什么停止SparkContext (sc.stop())?
  • 如果不添加sc.stop(),会报错:ValueError: Cannot run multiple SparkContexts at once; existing SparkContext(app=PySparkShell, master=local[*]) created by &lt;module&gt; at D:\Program Files\Anaconda3\lib\site-packages\IPython\utils\py3compat.py:186
  • 让我换个说法。为什么要停止上下文并创建一个新上下文。

标签: pyspark pyspark-sql


【解决方案1】:

这应该可以工作(除了在我认为是一种类型的 sc 创建结束时您缺少“)”的代码中)。你可以尝试如下创建sc:

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

顺便说一句,sc.stop 意味着您已经有一个 spark 上下文,如果您使用 pyspark 则为 true,但如果您使用 spark-submit 则不是。最好使用适用于这两种情况的 SparkContext.getOrCreate。

【讨论】:

  • 感谢您的帮助。我刚刚带您回答并更新了我的代码。但是它引发了一个错误:“NameError: name 'SparkConf' is not defined”。对不起,我不知道如何编辑我的新代码并生成评论框架。
  • 需要导入:import pyspark.SparkConf
  • 导入sparkconf后,它工作了。但是,它引发了一个“Py4JJavaError”。我已经安装了py4j模块并且它成功了。错误回溯很长而且很大。一些回溯在这里:Py4JJavaError Traceback (most recent call last) &lt;ipython-input-25-e49631c4d106&gt; in &lt;module&gt;() 4 sc.stop() 5 conf = SparkConf().setAppName("app1").setMaster("local") ----&gt; 6 sc = SparkContext(conf=conf) 7 data2=[("a",5),("b",5),("a",5)] 8 print(data2) .
  • 你是如何运行它的?我的意思是运行脚本的命令行命令?
  • 我的运行方式是“Jupyter Notebook+pyspark”。也就是说:jupyter notebook 用作pyspark shell。我认为有必要向您展示我的代码。同时,结果已经改变。代码:import pandas as pd from pyspark import SparkConf import numpy as np sc.stop() conf = SparkConf().setAppName("app1").setMaster("local") sc = SparkContext(conf=conf) print(sc) data2=[("a",5),("b",5),("a",5)] print(data2) df=sqlContext.createDataFrame(data2).
【解决方案2】:

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

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

我也在 jupyter notebook 中运行 spark。

【讨论】:

    猜你喜欢
    • 2021-09-08
    • 2019-01-01
    • 2021-12-26
    • 2019-07-23
    • 2018-05-13
    • 2020-09-07
    • 2017-05-03
    • 2023-03-16
    • 2018-07-14
    相关资源
    最近更新 更多