Разбор и загрузка в Hive / Hadoop - PullRequest
3 голосов
/ 06 июля 2011

Я новичок в инфраструктуре hadoop map Reduce, и я подумываю об использовании карты hadoop Reduce для анализа моих данных. У меня есть тысячи больших файлов с разделителями, для которых я думаю написать карту, чтобы сократить количество разборов этих файлов и загрузить их в хранилище данных улья. Я написал парсер в Perl, который может анализировать эти файлы. Но я застрял в том же самом с Hadoop map Reduce

Например: у меня есть файл вроде x = a y = b z = c ..... x = p y = q z = s ..... x = 1 z = 2 .... и так далее

Теперь мне нужно загрузить этот файл в виде столбцов (x, y, z) в таблице кустов, но я не могу понять, могу ли я продолжить с ним. Любое руководство с этим было бы очень полезно.

Другая проблема в этом состоит в том, что в некоторых файлах поле y отсутствует. Я должен включить это условие в карту уменьшить работу. До сих пор я пытался использовать streaming.jar и предоставить мой parser.pl в качестве средства отображения в качестве входных данных для этого файла JAR. Я думаю, что это не способ сделать это :), но я просто пытался, если это сработает. Кроме того, я подумал об использовании функции загрузки Hive, но отсутствующий столбец создаст проблему, если я укажу regexserde в таблице улья.

Я потерян в этом сейчас, если бы кто-нибудь мог направить меня в этом, я был бы благодарен:)

С уважением, Атул

1 Ответ

7 голосов
/ 07 июля 2011

Я недавно что-то опубликовал в своем блоге. (Google "Hive Parse_url" должен быть в числе первых)

Я анализировал URL, но в этом случае вы захотите использовать str_to_map.

str_to_map(arg1, arg2, arg3)
  • arg1 => Строка для обработки
  • arg2 => Разделитель пары ключ-значение
  • arg3 => Разделитель значения ключа
str = "a=1 b=42 x=abc"
str_to_map(str, " ", "=")

Результат str_to_map даст вам map<str, str> из 3 пар ключ-значение.

str_to_map(str, " ", "=")["a"] --will return "1"

str_to_map(str, " ", "=")["b"] --will return "42"

Мы можем передать это в Улей:

INSERT OVERWRITE TABLE new_table_with_cols_x_y_z
(select params["x"], params["y"], params["z"] 
 from (
   select str_to_map(raw_line," ","=") as params from data
 ) raw_line_from_data
) final_data
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...