2021SC@SDUSC
上篇我们分析了Tuple(接口)和AbstractTuple(抽象类),这两个都是抽象方法,我们继续分析它的实现DefaultTuple
相关资料链接:【Pig源码分析】谈谈Pig的数据模型 -数据库-火龙果软件工程
类之间关系如下
从上图可以知道,在DefaultTuple类中有List<Object> mFields字段,这便是存储Tuple数据的地方了,mFields所持有类型为ArrayList<Object>()
DefaultTuple代码如下
函数功能:元组的默认实现。这个类将由DefaultTupleFactory创建
构造函数:
默认构造函数。这个构造函数是公共的,所以hadoop可以直接调用它。不过,inside pig不应该调用这个函数。使用TupleFactory代替。分配后,时间复杂度:O(1)
public DefaultTuple() {
mFields = new ArrayList<Object>();
}
构造一个具有已知字段数量的元组。包级别,以便调用者不能直接调用它。生成的元组被预填充为空元素。分配后,时间复杂度:O(N)@param大小 在元组中分配的字段数量
DefaultTuple(int size) {
mFields = new ArrayList<Object>(size);
for (int i = 0; i < size; i++)
mFields.add(null);
}
从现有的对象列表构造一个元组。包级别,以便调用者不能直接调用它。
加上分配后输入对象迭代的运行时间,时间复杂度:O(N)
@param c要转换为元组的对象列表
DefaultTuple(List<Object> c) {
mFields = new ArrayList<Object>(c);
}
从现有的对象列表构造一个元组。包级别,以便调用者不能直接调用它。
时间复杂度O(1) @param c要转换为元组的对象列表。这个列表将作为元组的一部分保存。@param junk只是用来区别于上面复制列表的构造函数
DefaultTuple(List<Object> c, int junk) {
mFields = c;
}
函数:
@Override
public int size() {
return mFields.size();
}
获取给定字段中的值。
public int size() {