Mi piace generare più tuple da una singola tupla. Quello che voglio dire è: Ho un file con i seguenti dati in esso.Divisione di una tupla in più tuple nel maiale
>> cat data
ID | ColumnName1:Value1 | ColumnName2:Value2
quindi caricarlo con il seguente comando
grunt >> A = load '$data' using PigStorage('|');
grunt >> dump A;
(ID,ColumnName1:Value1,ColumnName2:Value2)
Ora voglio dividere questo tupla in due tuple.
(ID, ColumnName1, Value1)
(ID, ColumnName2, Value2)
Posso utilizzare UDF insieme a foreach e generare. Qualcosa come il seguente?
grunt >> foreach A generate SOMEUDF(A)
EDIT:
ingresso tupla: (ID1, column1, column2) uscita: due tuple (ID1, COLUMN1) e (ID2, column2) quindi è List o devo restituire un sacchetto?
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);
}
}
}
Questo approccio è corretto?
Grazie mille. Posso fare la stessa cosa scrivendo un UDF. Aggiorno la domanda – FourOfAKind
Sì, è possibile. Vedi la prossima risposta. – alexeipab
È un grande aiuto. Grazie per il tuo tempo. – FourOfAKind