Ich mag es, mehrere Tupel aus einem einzigen Tupel zu generieren. Was ich meine ist: Ich habe Datei mit folgenden Daten drin.Teilen eines Tupels in mehrere Tupel in Pig
>> cat data
ID | ColumnName1:Value1 | ColumnName2:Value2
so lade ich es durch den folgenden Befehl
grunt >> A = load '$data' using PigStorage('|');
grunt >> dump A;
(ID,ColumnName1:Value1,ColumnName2:Value2)
Jetzt möchte ich dieses Tupel in zwei Tupel spalten.
(ID, ColumnName1, Value1)
(ID, ColumnName2, Value2)
Kann ich UDF zusammen mit foreach und generieren. Etwas wie das Folgende?
grunt >> foreach A generate SOMEUDF(A)
EDIT:
Eingangstupel: (id1, column1, column2) Ausgang: zwei Tupel (id1, column1) und (ID2, column2), so dass es Liste ist oder sollte ich eine Tasche zurückgeben?
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);
}
}
}
Ist diese Vorgehensweise korrekt?
Vielen Dank. Kann ich das Gleiche tun, wenn ich eine UDF schreibe? Ich aktualisiere die Frage. – FourOfAKind
Ja können Sie. Siehe nächste Antwort. – alexeipab
Seine große Hilfe. Vielen Dank für Ihre Zeit. – FourOfAKind