Я пытаюсь сводить данные и генерировать матрицу взаимодействия пользователя с элементом для моделирования. Я выполнял это как задание AWS Glue Spark.
В моей выборке 53 000 клиентов купили более 1 000 000 различных товаров. Это приведет к созданию матрицы взаимодействия с ~ 53 миллиардами ячеек для заполнения. Выглядит это так:
clientID ProductID Purchased
1 1 1
1 2 1
2 1 1
2 3 1
3 2 1
N.B. Purchased is a tinyint dummy indicating if a customer bought a product.
There are no rows for when a customer has not purchased.
В настоящее время я использую следующий код:
pivot = df.groupby("clientid").pivot("productid").agg(max("Purchased"))
Теперь я уже разрешил запуск этого задания в течение> 2 дней с 150 узлов (узлы quadcore 16GB) и по-прежнему нечего показать. Это заставляет меня хорошо осознавать стоимость этого, особенно учитывая, что это выборка населения, и в будущем ее нужно будет расширить до более миллиона клиентов.
Может ли кто-нибудь подтвердить, существует ли более эффективный с вычислительной точки зрения способ выполнить вышеуказанное, и объяснить мне это?
Спасибо за любую помощь заранее. Если вам нужна дополнительная информация, дайте мне знать.