本节采用eclipse开发简单的pig的自定义函数。
github地址:
https://github.com/lightTrace/Hadoop/tree/master/hadoop-01
一 为什么要自定义函数
当我们希望简化程序结构或者需要重用程序代码时,自定义函数就是必须的,这和oracle数据库的function是一个道理。
二 准备数据上传到pig中
我准备实现1918年到2018年的温度转换:
温度 分类
x>=30 hot
x>=10 and x<30 moderate
x<10 cool
数据在github的temperature.txt中,大家直接复制下来上传到hdfs中,进入到复制好temperature.txt的目录,执行:
hadoop fs -put temperature.txt /lighttrace/pig
三 eclipse开发自定义函数
1.创建一个project,请注意编译级别需要和实际运行环境的jdk级别相同,项目结构图:
getTemType代码:
package cn.com;
import java.io.IOException;
import org.apache.pig.EvalFunc;
import org.apache.pig.data.Tuple;
public class getTemType extends EvalFunc<String> {
@Override
public String exec(Tuple tuple) throws IOException {
Object object = tuple.get(0);
int temperature = (Integer)object;
if (temperature >= 30){
return "Hot";
}
else if(temperature >=10){
return "Moderate";
}
else {
return "Cool";
}
}
}
这里的代码就比原生开发reduce的代码友好多了。
四 运行自定义函数
在eclipse中右击项目–export–jar,然后将jar包复制到linux目录下,然后运行pig命令运行pig:
1.加载数据
records = load '/lighttrace/pig/temperature1.txt' as (year: chararray,temperature: int);
2.将jar文件注册到pig环境中
这里jar文件不需要上传到
rigister /lighttrace/pig/PigUdf.jar
3.循环调用自定义函数改变数据结构
result = foreach records generate year,cn.com.getTemType(temperature);
4.查看结果:
dump result;