web-dev-qa-db-ja.com

AttributeError: 'NoneType'オブジェクトに属性 'sc'がありません

すみません。今日、PysparkでsqlContextを使用してDataFrameを作成する方法についてプログラムを実行したいと思います。結果はAttributeErrorです。これは、「AttributeError: 'NoneType'オブジェクトには属性 'sc'がありません」です。私のコンピューターはwin7で、sparkのバージョンは1.6.0、APIはpython3です。私は何度かグーグルを持っていて、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'がありません」のエラーが表示されるのですか?

6
haihong zeng

これは機能するはずです(私が想像するsc作成の最後に ')'が欠落しているコードを除いて)。次のようにscを作成してみてください。

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

ところで、sc.stopは、すでにsparkコンテキストがあることを意味します。これは、pysparkを使用した場合は真ですが、spark-submitを使用した場合は真ではありません。両方の場合に機能するSparkContext.getOrCreateを使用することをお勧めします。

1
Assaf Mendelson

これが私のために働いた最小限の例です。後で使用しないのに、なぜ最初に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ノートブックでsparkを実行しています。

0
Sören