Создание матрицы предмета в Scala (Spark) - PullRequest
0 голосов
/ 15 апреля 2020

У меня возникли проблемы с кодированием в scala (это мой первый раз), я строю базовую c систему рекомендаций для предметов для моего набора данных. После различных этапов обработки данных, в настоящее время у меня есть искровой фрейм данных со следующей схемой:

root
   |-- product_id: integer (nullable = true)
   |-- order_id: integer (nullable = true)
   |-- user_id: integer (nullable = true)

, и это пример данных в моем фрейме данных:

+-------+----------+--------+
|user_id|product_id|order_id|
+-------+----------+--------+
| 205022|      1401| 1871854|
|   2502|      1401| 3409991|
| 140656|      1401| 2801756|
| 201432|      1401|  138557|
| 201432|      1401| 1337880|
| 164682|      1401|  147805|
|  34938|      1402| 2757722|
| 201432|      1402|  222168|
| 201432|      1403| 2896873|
| 150340|      1401|  383874|
+-------+----------+--------+

Для начала, Я хочу построить матрицу элемент-элемент из приведенного выше фрейма данных так, чтобы row_index были prouct_id, а индекс столбца также был prouct_id, значения - это счетчик количества покупок продукта в строке вместе с соответствующим продуктом в столбец.

Сначала я подумал о простом groupby для product_id и повороте product_id с агрегатной функцией в виде count (), что-то вроде этого:

val itemItemDf = filteredDF.groupBy("product_id").pivot("product_id").count()

, но Я понял, что это неправильный подход, он не подсчитывает, сколько раз каждый предмет покупается вместе с другим предметом. Это только дает мне полную покупку каждого продукта. Другая идея состояла в том, чтобы провести l oop по всему набору данных, но я хочу избежать зацикливания, поскольку это большой набор данных с более чем 3 миллионами записей. Я надеюсь, что есть более простой способ сделать это, используя встроенные функции искры.

Я застрял и не знаю, как двигаться вперед, любая помощь (или указание в правильном направлении) будет высоко ценится .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...