2

Я использую следующий код для создания модели кластеризации, а затем классифицировать каждую запись к определенной группе:pyspark: добавление/слияние PythonRDD к pyspark dataframe

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) 

Как добавляемый предсказанному результат обратно в spark_df как дополнительный столбец? Благодаря!

+0

Почему бы не использовать 'ml' в первую очередь? – zero323

+0

Мне не удалось преобразовать spark_df (кадр данных) в набор данных искры. И если я просто использую фрейм данных с ml, это не сработает. Любое предложение о том, как преобразовать фрейм данных в набор данных? Благодаря! – Edamame

+0

Если я использую ml: model = kmeans.fit (spark_df), я получил ошибки: AnalysisException: u «не может разрешить« функции »с учетом входных столбцов: [field_1, field_2, ... field10]; Поэтому мне кажется, что я не могу использовать spark_df напрямую – Edamame

ответ

1

pyspark.mllib.clustering.KMeansModel является одной из редких моделей, которые могут быть использованы непосредственно в трансформации PySpark, так что вы можете просто map с predict:

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

В общем случае, когда не представляется возможным zip является правильным инструментом для работы:

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

zip выдает кортеж со строкой и прогнозируемым значением .. как мы можем добавить его как столбец «new_col» к самому файлу данных, чтобы мы могли записать его обратно в db, используя saveastable(). – venkat

+0

@venkat Это 'mllib' не' ml'. В моделях 'ml' просто используйте метод' transform'. – zero323

+0

Я говорил о mllib not ml, как мне получить кадр данных с дополнительным столбцом прогнозирования и написать обратно в db? – venkat

Смежные вопросы