Разделение кортежа на несколько кортежей в Pig
Мне нравится генерировать несколько кортежей из одного кортежа. Я имею в виду: У меня есть файл со следующими данными в нем.
>> cat data
ID | ColumnName1:Value1 | ColumnName2:Value2
поэтому я загружаю его следующей командой
grunt >> A = load '$data' using PigStorage('|');
grunt >> dump A;
(ID,ColumnName1:Value1,ColumnName2:Value2)
Теперь я хочу разделить этот кортеж на два кортежа.
(ID, ColumnName1, Value1)
(ID, ColumnName2, Value2)
Могу ли я использовать UDF вместе с foreach и генерировать. Что-то вроде следующего?
grunt >> foreach A generate SOMEUDF(A)
РЕДАКТИРОВАТЬ:
входной кортеж: (id1, column1, column2) вывод: два кортежа (id1, column1) и (id2, column2), так что это список или я должен вернуть мешок?
public class SPLITTUPPLE extends EvalFunc <List<Tuple>>
{
public List<Tuple> exec(Tuple input) throws IOException {
if (input == null || input.size() == 0)
return null;
try{
// not sure how whether I can create tuples on my own. Looks like I should use TupleFactory.
// return list of tuples.
}catch(Exception e){
throw WrappedIOException.wrap("Caught exception processing input row ", e);
}
}
}
Правильный ли этот подход?