2014-12-23 2 views
2

Я хотел бы написать сценарий свиньи для запроса ниже.Объединить две строки в свинге

Input является:

ABC,DEF,, 
,,GHI,JKL 
MNO,PQR,, 
,,STU,VWX 

Вывод должен быть:

ABC,DEF,GHI,JKL 
MNO,PQR,STU,VWX 

Может кто-нибудь, пожалуйста, помогите мне?

+0

Я использовал перекрестное соединение и кубов, но неспособных решить эту проблему. – Viru

+0

Это ваш вход фиксированный формат? т.е. первая строка последних двух столбцов будет нулевой, вторая строка первых двух столбцов будет пустой, 3-я строка последних двух столбцов будет равна null ...? –

ответ

0

Будет сложно решить эту проблему с использованием родной свиньи. Один из вариантов может быть загружен в библиотеку datafu-1.2.0.jar и попробуйте подход ниже.

input.txt

ABC,DEF,, 
,,GHI,JKL 
MNO,PQR,, 
,,STU,VWX 

PigScript:

REGISTER /tmp/datafu-1.2.0.jar; 
DEFINE BagSplit datafu.pig.bags.BagSplit(); 

A = LOAD 'input.txt' USING PigStorage(',') AS(f1,f2,f3,f4); 
B = GROUP A ALL; 
C = FOREACH B GENERATE FLATTEN(BagSplit(2,$1)) AS mybag; 
D = FOREACH C GENERATE FLATTEN(STRSPLIT(REPLACE(BagToString(mybag),'_null_null_null_null',''),'_',4)); 
E = FOREACH D GENERATE $2,$3,$0,$1; 
DUMP E; 

Выход:

(MNO,PQR,STU,VWX) 
(ABC,DEF,GHI,JKL) 

Примечание: Основываясь на приведенном выше формате ввода, мое предположение будет 1-й строкой, последние два столбца будут нулевыми, вторая строка первых двух столбцов будет равна нулю, аналогично для 3-й и 4-й строки также

+0

вывод вышеуказанного сценария: {(null, null, STU, VWX_MNO_PQR_null_null) (null, null, GHI, JKL_ABC_DEF_null_null)} – Viru

+0

Он отлично работает для меня, и я получил ожидаемый результат. Можете ли вы вставить свой скрипт свиньи, а также вход? –

+0

Спасибо, что ответили на Шиву. Это не для меня. Я отредактировал ваш ответ, но результат все же не так ожидаемый. – Viru

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