web-dev-qa-db-fra.com

AttributeError: l'objet 'DataFrame' n'a pas d'attribut 'map'

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!

31
Edamame

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.

67
David