chciałem przekonwertować ramkę danych iskra, aby dodać za pomocą poniższego kodu:AttributeError: obiekt „DataFrame” nie ma atrybutu „mapy”
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")
Szczegółowy komunikat o błędzie:
---------------------------------------------------------------------------
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'
Czy ktoś wie, co zrobiłem źle tutaj? Dzięki!
Należy pamiętać, że MLLIB zbudowany jest wokół RDD, podczas gdy ML jest ogólnie zbudowany wokół ramek danych. Ponieważ wydaje się, że używasz Sparka 2.0, sugerowałbym, żebyś sprawdził KMeans z ML: https://spark.apache.org/docs/latest/ml-clustering.html – Jeff
@JeffL: Sprawdziłem ml i zauważyłem że dane wejściowe muszą być danymi, a nie ramką danych. Więc musimy zrobić kolejną warstwę konwersji, aby przekonwertować ramkę danych na zbiór danych, aby użyć ml? – Edamame
Nie jestem już w 100% jasna na rozróżnienie, choć w Pythonie uważam, że jest to prawie dyskusyjne. W rzeczywistości, jeśli przeglądasz kod gitubu, w 1.6.1 różne metody ramek danych są w module ramek danych, podczas gdy w 2.0 te same metody są w module zestawu danych i nie ma modułu ramek danych. Więc nie sądzę, że napotkasz jakiekolwiek problemy z konwersją między ramką danych a zestawem danych, przynajmniej w interfejsie API Pythona. – Jeff