Je voulais convertir le cadre de données spark à ajouter à l'aide du code ci-dessous:
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")
Le message d'erreur détaillé est:
---------------------------------------------------------------------------
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'
Est-ce que quelqu'un sait ce que j'ai mal fait ici? Merci!
Vous ne pouvez pas map
un cadre de données, mais vous pouvez le convertir en RDD et le mapper en faisant spark_df.rdd.map()
. Avant Spark 2.0, spark_df.map
Aurait alias to spark_df.rdd.map()
. Avec. Spark 2.0, vous devez appeler explicitement .rdd
D'abord.