Как читать исходный текст в Hadoop, разделенный специальным символом

В моем формате данных вместо новой строки используется \0. Таким образом, читатель textLine по умолчанию не работает. Как я могу настроить его для чтения строк, разделенных специальным символом?

Если невозможно настроить LineReader, возможно, можно применить специальный потоковый процессор (tr "\0" "\n"), не знаю, как это сделать.


person yura    schedule 25.08.2012    source источник


Ответы (3)


Вы можете написать свой собственный класс InputFormat, который разбивает данные на \0 вместо \n. Пошаговое руководство о том, как это сделать, см. здесь: http://developer.yahoo.com/hadoop/tutorial/module5.html#fileformat

Суть в том, что вам нужно создать подкласс по умолчанию InputFormat или любой из его подклассов и определите свой собственный RecordReader с помощью пользовательских правил. Для получения дополнительной информации вы можете обратиться к документации по InputFormat.

person HypnoticSheep    schedule 27.08.2012

Для этой цели существует свойство конфигурации "textinputformat.record.delimiter". Вы можете изменить разделитель EOL по умолчанию ("\n"), изменив значение этого свойства на "\0".

Для получения дополнительной информации перейдите сюда: http://amalgjose.wordpress.com/2013/05/27/custom-text-input-format-record-delimiter-for-hadoop

Также есть аналогичный вопрос об изменении разделителя по умолчанию в spark, что тоже может быть полезно: Установка textinputformat.record.delimiter в spark

person k-sever    schedule 26.03.2014

Как насчет того, будет ли работать схема TextDelimited? http://docs.cascading.org/cascading/1.2/javadoc/cascading/scheme/TextDelimited.html

Это позволяет избежать написания собственных InputFormat и т.д.

Примеры текстовых разделителей приведены в https://github.com/Cascading/Impatient/wiki/Part. -2

person Paco    schedule 03.01.2013