2021SC@SDUSC
上篇已经看了TupleFactory(抽象类)和TupleMaker(接口),接下来继续结合博客内容对源码进行分析
相关资料链接:【Pig源码分析】谈谈Pig的数据模型 -数据库-火龙果软件工程
博客摘要:
在BinSedesTupleFactory的newTuple方法中,返回的是BinSedesTuple对象。BinSedesTuple类继承于DefaultTuple类,在DefaultTuple类中有List<Object> mFields字段,这便是存储Tuple数据的地方了,mFields所持有类型为ArrayList<Object>();。类图关系:
找到项目中BinSedesTupleFactory的代码:
/**
* Default implementation of TupleFactory.
*/
@InterfaceAudience.Private
public class BinSedesTupleFactory extends TupleFactory {
@Override
public Tuple newTuple() {
return new BinSedesTuple();
}
@Override
public Tuple newTuple(int size) {
return new BinSedesTuple(size);
}
@Override
@SuppressWarnings("unchecked")
public Tuple newTuple(List c) {
return new BinSedesTuple(c);
}
@Override
@SuppressWarnings("unchecked")
public Tuple newTupleNoCopy(List list) {
return new BinSedesTuple(list, 1);
}
@Override
public Tuple newTuple(Object datum) {
Tuple t = new BinSedesTuple(1);
try {
t.set(0, datum);
} catch (ExecException e) {
// The world has come to an end, we just allocated a tuple with one slot
// but we can't write to that s