接口声明变量的一个实际例子
来源:互联网 发布:cms监控软件安卓版 编辑:程序博客网 时间:2024/05/19 13:19
java自学者,如果错误,还请多多指教。实际工作中在重写UDTF子类的process方法的时候,遇到了一个forward方法,在研究源码的过程中对接口的概念更为清晰了。
UDTF接口说明如下:
Java UDTF需要继承com.aliyun.odps.udf.UDTF类。这个类需要实现4个接口。
接口定义
描述
public void setup(ExecutionContext ctx)
throws UDFException
初始化方法,在UDTF处理输入数据前,调用用户 自定义的初始化行为。在每个Worker内setup会 被先调用一次。
public void process(Object[] args)
throws UDFException
这个方法由框架调用,SQL中每一条记录都会对 应调用一次process,process的参数为SQL语句 中指定的UDTF输入参数。输入参数以Object[]的 形式传入,输出结果通过forward函数输出。用 户需要在process函数内自行调用forward,以决 定输出数据。
public void close() throws UDFException
UDTF的结束方法,此方法由框架调用,并且只会 被调用一次,即在处理完最后一条记录之后。
public void forward(Object ...o)
throws UDFException
用户调用forward方法输出数据,每次forward 代表输出一条记录。对应SQL语句UDTF的as子句 指定的列。
其中forward方法如下
protected voidforward(Object... outs)throwsUDFException {
this.collector.collect(outs);
}
collector是接口UDTFCollector声明的变量,
privateUDTFCollector collector;
UDTFCollector声明如下的collect方法,
public interfaceUDTFCollectorextendsDataCollector {
voidcollect(Object[] var1);
}
既然forward方法是用户输出数据的方法,那它究竟如何传递参数呢?这就是接口声明一个变量的用处了。
接口通常被使用在Java编程语言,用来做回调函数使用 。Java并不允许方法作为参数传递使用,因此,其中一个解决办法则是可以定义一个接口,
把这个接口当成方法的参数,以此来使用该项对象的方法签名。问题又来了,那什么是方法签名呢?
所谓方法签名就由方法名+形参列表构成,也就是说,方法名和形参数据类型列表可以唯一的确定一个方法,与方法的返回值一点关系都没有,
而这也是判断重载重要依据。
于是归纳如下,forward方法使用UDFCollector声明的collector里面的collect方法,于是给forward传参时就确定了一个对应的方法签名从而在UDTF函数
解析出输出参数。
阅读全文
0 0
- 接口声明变量的一个实际例子
- 一个二叉排序树的实际例子
- 用JAVA接口声明一个变量是什么意思?
- IOS关于变量声明的例子
- 一个实际例子看漏测的严重后果
- spring security学习- 一个实际的例子
- 最小二乘法实际应用的一个完整例子
- 成员变量是属于声明的对象还是实际对象
- javascript函数声明提前的一个例子
- volatile变量的一个例子
- VBA--声明变量类型的一个陷阱!
- 静态的声明一个指针变量
- 请教一个声明变量的问题
- 声明一个变量
- 通过一个实际的例子学习SQLServer存储过程
- 通过一个实际的例子学习Oracle存储过程
- 通过一个实际的例子学习Oracle存储过程
- 通过一个实际的例子学习Oracle存储过程
- pipe的使用
- 【基于PCA的人脸识别算法】从QR分解到PCA,再到人脸识别
- 前端--编辑器有哪些?
- Android应用如何跳转到应用市场详情页面
- timit实例的运行
- 接口声明变量的一个实际例子
- CS229学习笔记之线性回归与梯度下降
- [jzoj4603]【NOIP2016提高A组模拟7.15】颜料大乱斗
- java代码实现的帧动画
- JavaScript学习-封装基础库2
- 在线开关MySQL5.7 GTID与传统快速切换
- Ubuntu 开机启动guake
- Redis配置文件详解
- deeplearning.ai-lecture1-building deep neural network-summary