pyspark:NameError:未定义名称'spark'

问题描述 投票:9回答:3

我正在复制官方文档网站上的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

需要设置哪些额外的配置/变量才能运行示例?

apache-spark machine-learning pyspark distributed-computing apache-spark-ml
3个回答
11
投票

既然你打电话给createDataFrame(),你需要这样做:

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

而不是这个:

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

spark站在那里作为sqlContext


一般来说,有些人有sc,所以如果这不起作用,你可以尝试:

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

21
投票

你可以加

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

在你的代码的开头定义一个SparkSession,然后spark.createDataFrame()应该工作。


1
投票

Answer by 率怀一很好,并将第一次工作。但是第二次尝试时,会抛出以下异常:

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

有两种方法可以避免它。

1)使用SparkContext.getOrCreate()而不是SparkContext()

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

2)最后使用sc.stop(),或者在启动另一个SparkContext之前。

© www.soinside.com 2019 - 2024. All rights reserved.