2016-11-28 96 views
1

對不起。今天我想運行一個關於如何在Pyspark中用sqlContext創建DataFrame的程序。結果是一個AttributeError,它是「AttributeError:'NoneType'對象沒有屬性'sc'「 我的電腦是win7,spark的版本是1.6.0,API是python3。我有幾次谷歌並閱讀Spark Python API Docs,並且無法解決問題。所以我尋找你的幫幫我。AttributeError:'NoneType'對象沒有屬性'sc'

我的代碼是:

#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'」?

+0

你爲什麼要停止'SparkContext'('sc.stop()')? – 2016-11-28 10:31:06

+0

如果你不添加sc.stop(),它會引發錯誤:'ValueError:不能同時運行多個SparkContexts;在D:\ Program Files \ Anaconda3 \ lib \ site-packages \ IPython \ utils \ py3compat.py:186'中創建了現有的SparkContext(app = PySparkShell,master = local [*])。 –

+0

讓我改說一下。爲什麼你停止背景並創建一個新的背景。 – 2016-11-28 13:39:12

回答

1

這應該工作(除非你的代碼缺少「)」在SC創建我想象的盡頭是一個類型)。你可以嘗試創建SC如下:

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

BTW sc.stop意味着你已經是如果你使用pyspark但如果您使用的火花提交真實的火花上下文。在兩種情況下使用SparkContext.getOrCreate更好。

+0

感謝您的幫助。我只是帶你回答並更新了我的代碼。但它引發了一個錯誤:「NameError:name'SparkConf'未定義。」很抱歉,我不知道如何編輯我的新代碼,導致評論框架。 –

+0

你需要導入它:導入pyspark.SparkConf –

+0

導入sparkconf後,它工作。但是,它引發了一個「Py4JJavaError」。我安裝了py4j模塊並且它已經成功了。錯誤Traceback很長很長。一些traceback在這裏:)Py4JJavaError Traceback in () 4 sc.stop() 5 conf = SparkConf()。setAppName(「app1」)。setMaster(「local 「) ----> 6 sc = SparkContext(conf = conf) 8 data2 = [(」a「,5),(」b「,5),(」a「,5)] data2)'。 –