Я пытаюсь провести анализ точности географического таргетинга на ip и имею два очень больших набора данных для работы на основе преобразования ip-адресов в ip целые числа или ip_number
(s).
Преобразование работает следующим образом
ip_number = 16777216*w + 65536*x + 256*y + z (1)
где
IP Address = w.x.y.z
Я построил свои две таблицы в Hadoop с Hive: Таблица 1 состоит из 2,9 мм строк и организована в географические местоположения, определяемые диапазонами ip_number
(s). Считанные поля:
start_ip, end_ip, zipcode, city
, где start_ip
- это минимальный ip_number
, а end_ip
- это максимальный ip_number
для данного почтового индекса.
Эта таблица является индексом сегментов или диапазонов ip_num и соответствующих местоположений, для которых мне нужно проанализировать использование из другой таблицы с уникальными номерами ip_num.
Моя вторая таблица или набор данных содержит данные о взаимодействии и использовании для каждого отдельного IP-адреса с нашего сервера. Таким образом, у меня есть 25MM уникальных ip_number
(s) с данными об использовании, которые мне нужно суммировать и группировать по сегментам в моей первой таблице. Считанные поля:
ip_number, ip_address, usage
Нет общего поля между двумя наборами данных для стандартного объединения в кусте, поэтому я застрял.
Я пытался использовать полные внешние объединения, но считаю, что результирующий набор данных слишком велик для нашего кластера Hadoop. Время ожидания сценария во время отображения / уменьшения.
Есть ли способ с помощью Hive выбрать строки из моей первой таблицы и суммировать поле из моей второй таблицы для активности из ip_numbers, которые соответствуют каждому сегменту или диапазону в первой таблице? Если нет, то есть ли способ с помощью Python или R манипулировать таблицами Hadoop для достижения этой цели?
Я хочу организовать результирующий набор данных:
table_1.ip_start, table_1.ip_end, table_1.zipcode, sum(table_2.usage)
Любая помощь очень ценится!