2

ich den folgenden Code bin mit einem Clustermodell zu erstellen, dann jeden Datensatz auf bestimmte Cluster klassifizieren:pyspark: append/Merge PythonRDD zu einem pyspark Datenrahmen

from pyspark.mllib.clustering import KMeans 
from pyspark.mllib.linalg import Vectors 

spark_df = sqlContext.createDataFrame(pandas_df) 
rdd = spark_df.rdd.map(lambda data: Vectors.dense([float(c) for c in data])) 
model = KMeans.train(rdd, 2, maxIterations=10, initializationMode="random") 

result = model.predict(red) 

Wie anhängen ich das vorhergesagte Ergebnis zurück an die spark_df als zusätzliche Spalte? Vielen Dank!

+0

Warum nicht 'ml' an erster Stelle verwenden? – zero323

+0

Ich konnte spark_df (Datenframe) nicht in Spark-Dataset konvertieren. Und wenn ich nur Datenrahmen mit ml verwende, wird es nicht funktionieren. Irgendwelche Vorschläge zum Konvertieren von Datenrahmen in Datensatz? Vielen Dank! – Edamame

+0

Wenn ich ml: model = kmeans.fit (spark_df) verwende, habe ich Fehler: AnalysisException: u "kann' 'features' 'gegebene Eingabespalten nicht auflösen: [field_1, field_2, ... field10];" So scheint es mir, dass ich spark_df nicht direkt verwenden kann – Edamame

Antwort

1

pyspark.mllib.clustering.KMeansModel ist eines der seltenen Modelle, die direkt in PySpark Transformation verwendet werden können, so können Sie einfach map mit predict:

rdd.map(lambda point: (model.predict(point), point)) 

Im allgemeinen Fall, wenn es nicht möglich zip ist das richtige Werkzeug für den Job ist:

rdd.zip(model.predict(rdd)) 
+0

zip gibt ein Tupel mit der Zeile und dem vorhergesagten Wert aus. Wie können wir es als Spalte "new_col" zum Datenrahmen selbst hinzufügen, so dass wir es mit saveastable zurück in db schreiben können(). – venkat

+0

@venkat Das ist 'mllib' nicht' ml'. Bei 'ml' Modellen benutzen Sie einfach' transform' Methode. – zero323

+0

ich sprach über mllib nicht ml, wie bekomme ich Datenrahmen mit zusätzlichen Vorhersage Spalte und schreibe zurück in db? – venkat