У меня есть таблица улья, которая имеет 3 столбца: ["merchants_index", "days_index", "customer_index"]. Конечная цель - рассчитать процент повторных клиентов для каждого продавца в каждую неделю. Под повторяющимся покупателем я имею в виду, например, покупателя, который совершал покупки у продавца и на неделе 10, также покупал у того же продавца в предыдущие 4 недели (недели 6-9).
Вот мой подход:
шаг 1, создайте список клиентов за текущую неделю и еще один список клиентов за предыдущие 4 недели для каждого продавца и каждой недели.
select
merchant_index,
week_index,
collect_set(customer_index) over(partition by merchants_index range between 0 preceding and current row) AS uniq_cust_current,
collect_set(customer_index) over(partition by merchants_index range between 4 preceding and 0 preceding) AS uniq_cust_repeat
from
source_table
шаг 2, используя Spark, сопоставьте с таблицей улья функцию python, которая вычисляет требуемый процент путем сравнения двух списков для каждой строки таблицы улья.
Функция Python выглядит следующим образом:
len(numpy.intersect1d(uniq_cust_current, uniq_cust_repeat))* 1.0/ len(uniq_cust_current)
Кроме того, у меня есть только встроенные функции в улье и искре.
Причина, по которой я участвую в Hive и Spark, заключается в том, что я не знаю, как сравнивать списки в Hive, и я не знаю, как выполнить расчет движущегося окна в Spark.
Однако, поскольку таблица кустов огромна, более 100 миллионов строк, вывод первого шага требует слишком много памяти, поэтому задание будет уничтожено.
Любая помощь будет высоко ценится.