2015-11-19 2 views
0

У меня есть файл, составленный следующим образом:Pig или улей для файла манипуляции

&009:65 

34KKll90JJKK87LLOO 

%(..)?.I$£..... 

&013:35 

36KKll90TTYY87LLPP 

%%(.9)?' 


&025:66 

55KKll88ZZYY87MMQQ 

%&(.9)?%%??-_' 

И я хотел бы получить файл как:

&009:65 34KKll90JJKK87LLOO %(..)?.I$£..... 

&013:35 36KKll90TTYY87LLPP %%(.9)?'....... 

&025:66 55KKll88ZZYY87MMQQ %&(.9)?%%??-_'....... 

Я использую Hortonworks, и я хотел бы знаете, лучше ли использовать Hive или PIG и как я мог бы достичь этого, используя тот или иной?

ответ

1

Hive, Pig, и вся экосистема Hadoop ожидают файлы с однострочных записей, так что вы можете разбить файл произвольно на любой линии разрыва и обрабатывать шпагат отдельно с произвольным числом картопостроителей.

В вашем примере есть логические записи, созданные на нескольких строках. Не расщепляемый материал. Невозможно легко обрабатывать распределенным способом. Игра закончена.

Временное решение: запустить оболочку куда-нибудь, скачать уродливые вещи на месте, восстановить последовательные записи с хорошим старым SED или AWK утилиты, и загрузить результат. Затем вы можете прочитать его с помощью Hive или Pig.

Пример СЭД командной строки (AWK будет излишним ИМХО) ...

sed -n '/^&/ { N ; N ; N ; N ; s/\n\n/ /g ; p }' UglyStuff.dump > NiceStuff.txt 

Если вы предпочитаете остротами:

hdfs dfs -cat /some/path/UglyStuff.dump | sed -n '/^&/ { N ; N ; N ; N ; s/\n\n/ /g ; p }' | hdfs dfs -put -f - /different/path/NiceStuff.txt 
Смежные вопросы