создание нового кадра данных на основе индекса хранения столбцов - PullRequest
0 голосов
/ 21 мая 2019

Я работаю над использованием ALS в pyspark для совместной фильтрации.Модели дают результаты прогнозирования в кадре данных, как показано ниже.

CustomerID    ProductID    Rating
    0             4          4.2
    0             2          2.7
    0             6           3
    1             7          2.3
    1             0          0.5
    2             3          3.1

Я хочу преобразовать фрейм данных в матрицу элементов пользователя, как показано ниже, где productID становится столбцом, и каждая строка представляет рейтинг одного пользователя для всех продуктов.

0    0    2.7  0    4.2  0    3    0
0.5  0    0    0    0    0    0    2.3
0    0    0    3.1  0    0    0    0

Так что дляэтот кадр данных R, R [0,2] = 2,7 означает, что пользователь 0 дает оценку 2,7 продукту 2. R [2,3] = 3,1 означает, что пользователь 2 дает продукту 3 балл 3,1.

Есть ли в любом случаесделать это в pyspark?

1 Ответ

0 голосов
/ 21 мая 2019

Этого можно добиться с помощью функции pivot , за которой следует функция агрегирования.Я решил использовать max , но в зависимости от ваших данных могут использоваться другие функции, такие как avg .

from pyspark.sql.functions import max

l = [( 0,             4.0 ,         4.2),
    (0,             2.0,         2.7),
    (0,             6.0,           3.0),
    (1,             7.0,          2.3),
    (1,             0.0,          0.5),
    (2,             3.0,          3.1)]

columns = ['CustomerID',    'ProductID',    'Rating']

df=spark.createDataFrame(l, columns)
df = df.groupby('CustomerID').pivot('ProductID').agg(max("Rating"))
df.show()

Вывод:

+----------+----+----+----+----+----+----+ 
|CustomerID| 0.0| 2.0| 3.0| 4.0| 6.0| 7.0| 
+----------+----+----+----+----+----+----+ 
|         0|null| 2.7|null| 4.2| 3.0|null| 
|         1| 0.5|null|null|null|null| 2.3| 
|         2|null|null| 3.1|null|null|null| 
+----------+----+----+----+----+----+----+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...