Tôi muốn tạo nhiều bộ dữ liệu từ một bộ dữ liệu. Ý tôi là: Tôi có tệp với dữ liệu sau trong đó.Tách một tuple thành nhiều bộ dữ liệu trong Pig
>> cat data
ID | ColumnName1:Value1 | ColumnName2:Value2
vì vậy tôi tải nó bằng lệnh sau
grunt >> A = load '$data' using PigStorage('|');
grunt >> dump A;
(ID,ColumnName1:Value1,ColumnName2:Value2)
Bây giờ tôi muốn chia tuple này thành hai bộ dữ liệu.
(ID, ColumnName1, Value1)
(ID, ColumnName2, Value2)
Tôi có thể sử dụng UDF cùng với foreach và tạo ra không. Một số điều như sau?
grunt >> foreach A generate SOMEUDF(A)
EDIT:
đầu vào tuple: (id1, column1, column2) đầu ra: hai tuples (id1, column1) và (id2, column2) nên nó là Danh sách hay tôi nên trả lại một túi?
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);
}
}
}
Phương pháp này có đúng không?
Cảm ơn rất nhiều. Tôi có thể làm điều tương tự với việc viết một UDF. Tôi cập nhật câu hỏi. – FourOfAKind
Có thể. Xem câu trả lời tiếp theo. – alexeipab
Trợ giúp tuyệt vời của nó. Cảm ơn vì đã dành thời gian cho tôi. – FourOfAKind