2016-05-29 5 views
2

В настоящее время я пытаюсь преобразовать RDD в contingency table, чтобы использовать модуль pyspark.ml.clustering.KMeans, который принимает входной кадр данных.Преобразование RDD в таблицу непредвиденных обстоятельств: Pyspark

Когда я myrdd.take(K), (где К некоторое число) структура выглядит следующим образом:

[[u'user1' , ('itm1', 3), ..., ('itm2 ', 1)], [u'user2', ('itm1', 7), ..., ('itm2', 4)], ..., [u'usern ', (' itm2 ', 2), ..., ('itm3', 10)]]

В каждом списке содержится сущность как первый элемент и набор всех элементов и их подсчетов, которые понравились этому объекту в форме кортеж.

Теперь моя цель состоит в том, чтобы преобразовать приведенное выше в искру DataFrame, что напоминает следующую таблицу непредвиденных обстоятельств.

+----------+------+----+-----+ 
|entity |itm1 |itm2|itm3 | 
+----------+------+----+-----+ 
| user1 |  3| 1| 0| 
| user2 |  7| 4| 0| 
| usern |  0| 2| 10| 
+----------+------+----+-----+ 

Я использовал метод df.stat.crosstab цит в следующей ссылке:

Statistical and Mathematical Functions with DataFrames in Apache Spark - 4. Cross Tabulation (Contingency Table)

и почти близко к тому, что я хочу.

Но если есть еще одно поле, как счетчик в приведенном выше наборе т.е. ('itm1',3), как включить (или добавить) это значение в конечный результат непредвиденных таблицы (или матрицы сущность-элемента).

Конечно, я беру длинный маршрут, преобразовывая приведенный выше список из RDD в матрицу и записываю их как файл csv, а затем читаю как DataFrame.

Есть ли более простой способ сделать это с помощью DataFrame?

+1

Возможный дубликат [Pivot Спарк Dataframe] (http://stackoverflow.com/questions/30244910/pivot-spark-dataframe) – zero323

+0

Я не согласен с @ zero323 по этому вопросу как «прямой» дубликат, но [ссылка предоставлена] (http://stackoverflow.com/a/35676755/3415409) поставляет альтернативный путь t o делайте то, что ищете. – eliasah

+0

Ответ на этот вопрос можно увидеть из более недавнего моего вопроса здесь [Преобразование RDD в Dataframe] (http://stackoverflow.com/questions/37552052/convert-a-rdd-of-tuples-of-varying- размеры к а-dataframe-в-искры). Хотя первоначально это предназначалось для преобразования структуры RDD в кадр данных, окончательная часть ответа, использующая поворот, группирование и сумму, обеспечивает решение этого вопроса. Если кто-то почувствует, что это дубликат, я закрою текущий вопрос. – Rkz

ответ

0

Преобразование RDD в pyspark dataframe с использованием метода createDataFrame().

Используйте метод show после использования метода кросс-таблицы. Пожалуйста, обратитесь следующий пример:

cf = train_predictions.crosstab("prediction","label_col") 

Чтобы отобразить в табличном формате:

cf.show() 

Выход:

+--------------------+----+----+ 
|prediction_label_col| 0.0| 1.0| 
+--------------------+----+----+ 
|     1.0| 752|1723| 
|     0.0|1830| 759| 
+--------------------+----+----+ 
Смежные вопросы