У меня есть текстовый файл с разделителем табуляции, и я пытаюсь напечатать первый столбец как 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 (то есть имена).
Любое решение для этого?
ли ваши попыткам объединить все поля, начиная со вторым столбцом? или Вы пытаетесь разделить выход? –
Привет, Бенджамин, Спасибо за ваш ответ. Позвольте мне перефразировать мой вопрос. Скажем в файле фида с разделителем табуляции, у меня есть одна строка с данными как «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