2015-07-09 2 views
1

У меня есть несколько таблиц Hive, где некоторые из них находятся в формате Avro, а некоторые из них находятся в текстовом файле. Схемы немного разные, но все они содержат определенные атрибуты, которые мне нужны.Карта Java уменьшает чтение из другого формата - Avro, Textfile

Я планирую написать карту, чтобы уменьшить процесс обработки данных. Вопрос в том, что я стараюсь избегать тонны отдельных рабочих мест и стараться максимально упростить процесс. Скрестив пальцы, мне нужно только написать одну работу.

Есть ли какой-нибудь пример показа, как читать разные форматы входов в одном устройстве.

Скажем, например, у меня есть путь hdfs, который я знаю в AVRO, и у меня также есть другой путь hdfs, где данные находятся в текстовом файле.

// Pseudo code 
mapper (Paths){ 
    for(Path in Paths){ 
     if Path.containsAvro() { 
      ... read as avro 
     } else { 
      ... read as textfile 
     } 
     .. 
    } 
} 

ответ

0

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

MultipleInputs.addInputPath(job, new Path(path_to_data_with_format_1), SomeInputFormat.class, ReadFormatOneMapper.class); 
MultipleInputs.addInputPath(job, new Path(path_to_data_with_format_2), SomeOtherInputFormat.class, ReadFormatTwoMapper.class); 

Конечно, SomeInputFormat и SomeOtherInputFormat не реальные классы входных форматов. В этом примере два класса сопоставления будут выводить пары ключ/значение с одинаковыми типами kay/value, а редуктор, если он у вас есть, получит данные от обоих картографов.

Смежные вопросы