В настоящее время я пытаюсь преобразовать 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
цит в следующей ссылке:
и почти близко к тому, что я хочу.
Но если есть еще одно поле, как счетчик в приведенном выше наборе т.е. ('itm1',3)
, как включить (или добавить) это значение в конечный результат непредвиденных таблицы (или матрицы сущность-элемента).
Конечно, я беру длинный маршрут, преобразовывая приведенный выше список из RDD
в матрицу и записываю их как файл csv, а затем читаю как DataFrame
.
Есть ли более простой способ сделать это с помощью DataFrame?
Возможный дубликат [Pivot Спарк Dataframe] (http://stackoverflow.com/questions/30244910/pivot-spark-dataframe) – zero323
Я не согласен с @ zero323 по этому вопросу как «прямой» дубликат, но [ссылка предоставлена] (http://stackoverflow.com/a/35676755/3415409) поставляет альтернативный путь t o делайте то, что ищете. – eliasah
Ответ на этот вопрос можно увидеть из более недавнего моего вопроса здесь [Преобразование RDD в Dataframe] (http://stackoverflow.com/questions/37552052/convert-a-rdd-of-tuples-of-varying- размеры к а-dataframe-в-искры). Хотя первоначально это предназначалось для преобразования структуры RDD в кадр данных, окончательная часть ответа, использующая поворот, группирование и сумму, обеспечивает решение этого вопроса. Если кто-то почувствует, что это дубликат, я закрою текущий вопрос. – Rkz