Me gusta generar múltiples tuplas desde una sola tupla. Lo que quiero decir es: Tengo un archivo con los siguientes datos.División de una tupla en múltiples tuplas en Pig
>> cat data
ID | ColumnName1:Value1 | ColumnName2:Value2
así que cargarlo por el siguiente comando
grunt >> A = load '$data' using PigStorage('|');
grunt >> dump A;
(ID,ColumnName1:Value1,ColumnName2:Value2)
Ahora quieren dividir esta tupla en dos tuplas.
(ID, ColumnName1, Value1)
(ID, ColumnName2, Value2)
¿Puedo usar UDF junto con foreach y generar? Algo como el siguiente?
grunt >> foreach A generate SOMEUDF(A)
EDIT:
tupla de entrada: (id1, columna 1, columna2) de salida: dos tuplas (id1, COLUMN1) y (id2, columna2) por lo que es lista o debería devolver una bolsa?
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);
}
}
}
¿Es correcto este enfoque?
Muchas gracias. ¿Puedo hacer lo mismo escribiendo un UDF? Actualizo la pregunta. – FourOfAKind
Sí, puedes. Ver la siguiente respuesta. – alexeipab
Su gran ayuda. Gracias por tu tiempo. – FourOfAKind