web-dev-qa-db-ja.com

pyspark:NameError:name 'spark'は定義されていません

公式ドキュメントWebサイトからpyspark.mlの例をコピーしています: http://spark.Apache.org/docs/latest/api/python/pyspark.ml.html#pyspark.ml.Transformer

data = [(Vectors.dense([0.0, 0.0]),), (Vectors.dense([1.0, 1.0]),),(Vectors.dense([9.0, 8.0]),), (Vectors.dense([8.0, 9.0]),)]
df = spark.createDataFrame(data, ["features"])
kmeans = KMeans(k=2, seed=1)
model = kmeans.fit(df)

ただし、上記の例は実行されず、次のエラーが発生しました。

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-28-aaffcd1239c9> in <module>()
      1 from pyspark import *
      2 data = [(Vectors.dense([0.0, 0.0]),), (Vectors.dense([1.0, 1.0]),),(Vectors.dense([9.0, 8.0]),), (Vectors.dense([8.0, 9.0]),)]
----> 3 df = spark.createDataFrame(data, ["features"])
      4 kmeans = KMeans(k=2, seed=1)
      5 model = kmeans.fit(df)

NameError: name 'spark' is not defined

サンプルを実行するには、どのような追加の構成/変数を設定する必要がありますか?

10
Edamame

createDataFrame() を呼び出しているため、これを行う必要があります。

df = sqlContext.createDataFrame(data, ["features"])

これの代わりに:

df = spark.createDataFrame(data, ["features"])

sparksqlContextとして存在します。


一般に、一部の人々はscとしてそれを持っているので、それがうまくいかなかった場合、あなたは試すことができます:

df = sc.createDataFrame(data, ["features"])
12
gsamaras

あなたは付け加えられます

from pyspark.context import SparkContext
from pyspark.sql.session import SparkSession
sc = SparkContext('local')
spark = SparkSession(sc)

sparkSessionを定義するためのコードの先頭まで、spark.createDataFrame()が機能するはずです。

29
率怀一

率怀一による回答 は良好であり、初めて機能します。ただし、2回目に試すと、次の例外がスローされます。

_ValueError: Cannot run multiple SparkContexts at once; existing SparkContext(app=pyspark-Shell, master=local) created by __init__ at <ipython-input-3-786525f7559f>:10 
_

これを避けるには2つの方法があります。

1)SparkContext.getOrCreate()の代わりにSparkContext()を使用:

_from pyspark.context import SparkContext
from pyspark.sql.session import SparkSession
sc = SparkContext.getOrCreate()
spark = SparkSession(sc)
_

2)最後に、または別のSparkContextを開始する前にsc.stop()を使用します。

3
CodeGeass