2016-02-25 5 views
0

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

рассмотрит ниже файл для загрузки:

cat file.txt; 
1 A B 
2 C D E F 
3 G 
4 H I J K L M 

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

я должен получить выход как:

id   names 
1   A,B 
2   C,D,E,F 
3   G 
4   H,I,J,K,L,M 

Если имена разделяются с разделителем ,, то я получаю вывод, используя команды ниже:

test = load '/tmp/arr' using PigStorage('\t') as (id:int,names:chararray) 
btest = FOREACH test GENERATE id, FLATTEN(TOBAG(STRSPLIT(name,','))) as value:tuple(name:CHARARRAY); 

Но для массива с разделителем ('\t'), я не получаю их, потому что он рассматривает только первое значение в столбце 2 (то есть имена).

Любое решение для этого?

+0

ли ваши попыткам объединить все поля, начиная со вторым столбцом? или Вы пытаетесь разделить выход? –

+0

Привет, Бенджамин, Спасибо за ваш ответ. Позвольте мне перефразировать мой вопрос. Скажем в файле фида с разделителем табуляции, у меня есть одна строка с данными как «2 C D E F». Мне нужно загрузить эти данные из hdfs в переменную в командной консоли, используя свиньи. Я использовал grunt> data = load '/tmp/file.txt', используя PigStorage ('\ t') как (id: int, name: chararray). Я хочу сохранить данные как 2 в поле ID и (C, D, E, F) в качестве значения массива в поле под названием «имя». Я не уверен, как загрузить набор значений C D E F в одно поле (массив), называемое «имя». поскольку он ограничен табуляцией, им не удается сохранить данные в виде массива. – Revathi

ответ

0

У меня есть решение для этого:

При использовании PigStorage («\ т») в нагрузке, файл должен иметь вкладку разделитель. Таким образом, количество вкладок, используемых в строке, создает много coloumns (+1). Вот как это работает. Но у вас есть трюк Вы можете изменить разделитель по умолчанию и использовать какой-либо другой разделитель для загрузки файла, такого как запятая, а затем вы можете иметь имена в скомпонованных. Он будет работать наверняка образец файла ввода

1,A B 
2,C D E F 
3,G 
4,H I J K L M 

Надеется, что это помогает

+0

Спасибо за ваш ответ. Я думал, что могу создать массив с разделителем табулятора без использования каких-либо других разделителей вкладок. Теперь я получил точку. Спасибо еще раз. – Revathi

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