pyspark:NameError:名称“ spark”未定义
apache-spark
machine-learning
5
0

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

为了使示例运行,需要设置哪些其他配置/变量?

参考资料:
Stack Overflow
收藏
评论
共 3 个回答
高赞 时间 活跃

由于您正在调用createDataFrame() ,因此需要执行以下操作:

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

代替这个:

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

spark在那里代表sqlContext


通常,有些人将其作为sc ,所以如果不起作用,则可以尝试:

df = sc.createDataFrame(data, ["features"])
收藏
评论

率怀一的回答很好,并且将是第一次。但是第二次尝试时,它将引发以下异常:

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)最后或在启动另一个SparkContext之前使用sc.stop()

收藏
评论

你可以加

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

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

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号