Hadoop Java: как указать ключ карты как один из индексов входного разбиения? - PullRequest
1 голос
/ 09 февраля 2012

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

3070801,1963,1096,,"BE","",,1,,269,6,69,,1,,0,,,,,,,
3070802,1963,1096,,"US","TX",,1,,2,6,63,,0,,,,,,,,,
3070803,1963,1096,,"US","IL",,1,,2,6,63,,9,,0.3704,,,,,,,
3070804,1963,1096,,"US","OH",,1,,2,6,63,,3,,0.6667,,,,,,,
3070805,1963,1096,,"US","CA",,1,,2,6,63,,1,,0,,,,,,,
3070806,1963,1096,,"US","PA",,1,,2,6,63,,0,,,,,,,,,
3070807,1963,1096,,"US","OH",,1,,623,3,39,,3,,0.4444,,,,,,,
3070808,1963,1096,,"US","IA",,1,,623,3,39,,4,,0.375,,,,,,,
3070809,1963,1096,,"US","AZ",,1,,4,6,65,,0,,,,,,,,,
3070810,1963,1096,,"US","IL",,1,,4,6,65,,3,,0.4444,,,,,,,

В конфигурации задания hadoop я упоминаю разделитель как

job.set("key.value.separator.in.input.line", ",");

На основании этого ключ map() становитсяпервый столбец набора данных

Вопрос: Как я могу также упомянуть, что ключ должен быть index[9] в зависимости от разделения строки ввода

1 Ответ

0 голосов
/ 09 февраля 2012

Я думаю, что для этого уровня гибкости вам нужен собственный InputFormat, полученный из FileInputFormat.
Это будет относительно легко реализовать, если использовать какой-то существующий анализатор CSV. Я использую OpenCSV (http://opencsv.sourceforge.net/) и доволен этим.
Альтернативным способом обработки данных может быть улей. Вы можете угрожать CSV-файлу в HDFS как внешней таблице, а затем ссылаться на любой столбец отдельно. Обладая хорошей способностью определять функции UDF и собственные функции агрегирования, многие типы обработки могут выполняться таким образом.

...