Lubię generować wiele krotek z pojedynczej krotki. Mam na myśli: Mam plik z następującymi danymi.Dzielenie krotki na wiele krotek w Pig
>> cat data
ID | ColumnName1:Value1 | ColumnName2:Value2
więc załadować go za pomocą następującego polecenia
grunt >> A = load '$data' using PigStorage('|');
grunt >> dump A;
(ID,ColumnName1:Value1,ColumnName2:Value2)
Teraz chcę podzielić to na dwie krotki krotki.
(ID, ColumnName1, Value1)
(ID, ColumnName2, Value2)
Czy mogę używać UDF razem z foreach i generować. Coś takiego jak poniższe?
grunt >> foreach A generate SOMEUDF(A)
EDIT:
krotka wejściowe: (ID1, kolumna1, column2) wyjściowy: dwie krotki (ID1, COLUMN1) i (ID2, column2), więc to jest Lista czy powinienem zwrócić torba?
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);
}
}
}
Czy to podejście jest prawidłowe?
Wielkie dzięki. Czy mogę zrobić to samo z pisaniem UDF. Aktualizuję pytanie. – FourOfAKind
Tak, możesz. Zobacz następną odpowiedź. – alexeipab
To wielka pomoc. Dziękuję za Twój czas. – FourOfAKind