как выполнить ETL в карте / уменьшить - PullRequest
2 голосов
/ 03 января 2011

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

Я написал простую программу map / Reduce, которая выполняла небольшие преобразования, но требоваланемного более подробно ниже приведены детали:

  • файл обычно структурирован так: первая строка содержит разделенный запятыми список имен столбцов.Вторая и остальные строки задают значения для столбцов
  • В некоторых строках значения конечных столбцов могут отсутствовать, например: если имеется 15 столбцов, значения можно указывать только для первых 10 столбцов.
  • У меня есть около 5 входных файлов, которые мне нужно преобразовать и объединить в один файл.преобразования специфичны для каждого из 5 входных файлов.
  • Как передать контекстную информацию, такую ​​как имя файла, в программу преобразования / восстановления?
  • Преобразования специфичны для столбцов, так как мне запомнить столбцы, упомянутые в первой строке, а затем сопоставить и преобразовать значения в строках?

Ответы [ 2 ]

3 голосов
/ 03 января 2011

Разделить файл на строки, преобразовать (отобразить) каждую строку параллельно, объединить (уменьшить) полученные строки в один файл?

1 голос
/ 24 апреля 2011

Нельзя полагаться на информацию о столбце в первом ряду. Если ваш файл больше, чем блок HDFS, ваш файл будет разбит на несколько разделений, и каждый раздел будет передан другому преобразователю. В этом случае только маппер, получивший первое разбиение, получит первую строку с информацией о столбце, а остальные - нет.

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

Через объект контекста Hadoop вы можете получить имя файла, обрабатываемого картографом. Между прочим, я думаю, что у вас есть вся контекстная информация, на которую вы ссылаетесь, и вы можете выполнить конкретное преобразование файла. Несмотря на то, что логика преобразования различна для разных файлов, выходные данные преобразователя должны иметь одинаковый формат.

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

...