Как мне обрезать строку заголовка из файлов, обработанных Pig Hadoop? - PullRequest
5 голосов
/ 18 марта 2011

Я пытаюсь проанализировать файлы данных, разделенные табуляцией, сгенерированные нашими сервисами с помощью Amazon Elastic Map Reduce с помощью программы Pig.Все идет хорошо, за исключением того, что все наши файлы данных содержат строку заголовка, которая определяет назначение каждого столбца.Очевидно, что (строковые) заголовки не могут быть преобразованы в числовые значения данных, поэтому я получаю предупреждения от Pig, например:

2011-03-17 22:49:55,378 [main] WARN  org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigHadoopLogger - org.apache.pig.builtin.PigStorage: Unable to interpret value [<snip>] in field being converted to double, caught NumberFormatException <For input string: "headerName"> field discarded

У меня есть фильтр после оператора load, который пытается обеспечитьчто позже я не оперирую ни с какими строками заголовков (отфильтровывая термины заголовков), но я бы хотел избавиться от предупреждающего шума, чтобы избежать маскировки любых потенциальных проблем (например, реальных полей данных, которые не обрабатываются должным образом).

Возможно ли это?

Ответы [ 3 ]

3 голосов
/ 25 апреля 2013

Другой вариант, если вам неудобно писать UDF, может выглядеть примерно так:

Пример данных:

MyIntVal
123
456

Сценарий:

A = load 's3://blah/myFile' USING PigStorage() as (myintval: chararray);

B = filter A by myintval neq 'MyIntVal';

C = foreach B generate (int)$0;

Это отфильтрует строку заголовка, а затем преобразует оставшиеся значения в int.

Не говорю, что это лучший способ сделать это, но это еще один вариант, который довольно прост, если он соответствует вашей ситуации.

0 голосов
/ 02 июля 2015

Это может помочь вам получить ваш результат: -

input_file = load 'input' using PigStorage(',') as (row1:chararay, row2:chararray);
ranked = rank input_file;
/* ranked:{rank_input_file:long, row1:chararay, row2:chararay} */
NoHeader = filter ranked by (rank_input_file > 1);
New_input_file = foreach NoHeader generate row1, row2;
0 голосов
/ 07 апреля 2011

Вы можете сделать это перед отправкой задания Pig (если это возможно) или попробовать написать UDF, который будет выдавать нулевые значения при соблюдении определенных условий, поэтому позже вы можете отфильтровать это.

...