【发布时间】:2017-01-24 21:59:48
【问题描述】:
我想使用下面的代码转换火花数据框来添加:
from pyspark.mllib.clustering import KMeans
spark_df = sqlContext.createDataFrame(pandas_df)
rdd = spark_df.map(lambda data: Vectors.dense([float(c) for c in data]))
model = KMeans.train(rdd, 2, maxIterations=10, runs=30, initializationMode="random")
详细的错误信息是:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-11-a19a1763d3ac> in <module>()
1 from pyspark.mllib.clustering import KMeans
2 spark_df = sqlContext.createDataFrame(pandas_df)
----> 3 rdd = spark_df.map(lambda data: Vectors.dense([float(c) for c in data]))
4 model = KMeans.train(rdd, 2, maxIterations=10, runs=30, initializationMode="random")
/home/edamame/spark/spark-2.0.0-bin-hadoop2.6/python/pyspark/sql/dataframe.pyc in __getattr__(self, name)
842 if name not in self.columns:
843 raise AttributeError(
--> 844 "'%s' object has no attribute '%s'" % (self.__class__.__name__, name))
845 jc = self._jdf.apply(name)
846 return Column(jc)
AttributeError: 'DataFrame' object has no attribute 'map'
有谁知道我在这里做错了什么?谢谢!
【问题讨论】:
-
请记住,MLLIB 是围绕 RDD 构建的,而 ML 通常是围绕数据帧构建的。由于您似乎使用的是 Spark 2.0,我建议您从 ML 中查找 KMeans:spark.apache.org/docs/latest/ml-clustering.html
-
@JeffL:我检查了 ml,我注意到输入必须是数据集,而不是数据框。所以我们需要再做一层转换,将data frame转换为dataset,才能使用ml?
-
我不再 100% 清楚区别,尽管在 Python 中我相信它几乎没有实际意义。事实上,如果你浏览 github 代码,在 1.6.1 中,各种数据框方法都在数据框模块中,而在 2.0 中,这些相同的方法在数据集模块中并且没有数据框模块。所以我认为你不会遇到数据框和数据集之间的任何转换问题,至少在 Python API 中是这样。
标签: python apache-spark pyspark spark-dataframe apache-spark-mllib