web-dev-qa-db-fra.com

pyspark: NameError: le nom 'spark' n'est pas défini

Je copie l'exemple pyspark.ml du site Web officiel du document: 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)

Cependant, l'exemple ci-dessus ne fonctionnerait pas et m'a donné les erreurs suivantes:

---------------------------------------------------------------------------
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

Quelle configuration/variable supplémentaire doit être définie pour exécuter l'exemple?

10
Edamame

Puisque vous appelez createDataFrame () , vous devez faire ceci:

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

au lieu de cela:

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

spark se tient là comme sqlContext.


En général, certaines personnes l'ont comme sc, donc si cela n'a pas fonctionné, vous pouvez essayer:

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

Vous pouvez ajouter

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

au début de vos codes pour définir une SparkSession, alors spark.createDataFrame() devrait fonctionner.

29
率怀一

Réponse de 率 怀 一 est bon et fonctionnera pour la première fois. Mais la deuxième fois que vous l'essayez, il lèvera l'exception suivante:

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

Il y a deux façons de l'éviter.

1) Utilisation de SparkContext.getOrCreate() au lieu de SparkContext():

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

2) En utilisant sc.stop() à la fin, ou avant de démarrer un autre SparkContext.

3
CodeGeass