Как использовать ежедневные данные для построения годовых данных? - PullRequest
2 голосов
/ 01 мая 2019

У меня есть набор данных, который структурирован следующим образом:

[uid, product,   currency,  platform,  date]
[100, product_1, USA,       desktop,   2019-01-01]
[100, product_2, USA,       desktop,   2019-01-03]
[200, product_3, CAN,       mobile,    2019-01-02]
[300, product_1, GBP,       desktop,   2019-01-01]
and so on...

Данные должны агрегироваться ежегодно:

[year, product,   currency, platform,  uid_count]
[2019, product_1, USA,      desktop,   1000]
[2019, product_2, USA,      desktop,   2000]
[2019, product_3, GBP,      mobile,    5000]

После исследования решения, которое я прочитал об алгоритмах построения эскизов,которые, кажется, в правильном направлении.По сути, данные слишком велики для загрузки в одном пакете, поэтому мне нужно обрабатывать их постепенно, например, в день, чтобы я не выполнял SQL-запрос вроде:

SELECT year(date), product, currency, platform, count(distinct uid) FROM tbl_name GROUP BY 1, 2, 3, 4

ИЛИ

SELECT year(date), product, currency, platform, count(distinct uid) FROM tbl_name GROUP BY 1, 2, 3, 4
with cube

1 Ответ

1 голос
/ 02 мая 2019

К сожалению, count(distinct uid) не является аддитивным, и вам нужно повторить набор данных за весь год, вы не можете считать один день отдельно и добавить его к существующему кумулятивному счету года. Потому что если одни и те же UID существуют во многих разных днях, то count(distinct uid) в первый день + count(distinct uid) во второй день не равен count(distinct uid), рассчитанному в эти два дня. Это делает подсчет (отличный) не масштабируемым.

Но, вероятно, вы можете сделать некоторую близкую оценку на основе алгоритма построения эскизов, если оценка применима.

Существует несколько реализаций алгоритмов эскиза для Hive, готовых к использованию.

  1. Этот HyperLogLog для Hive: HllHiveUDFs Библиотека эскизов из Yahoo

  2. UDFs эскиза из кирпичного дома - Алгоритм рисования "минимальных значений K".

  3. Еще одна реализация: https://github.com/MLnick/hive-udf/wiki

...