利用IDEA创建maven项目实现Pig用户自定义函数

一、什么时候需要用户自定义函数呢?和其他语言一样,当你希望简化程序结构或者需要重用程序代码时,函数就是你的不二选择。Pig的用户自定义函数可以用Java编写,也可以用Python或Javascript编写。下面我们以Java为例进行介绍。

1、利用IDEA创建maven项目,并在Pom.xml中添加依赖如下

<dependencies>

    <dependency>

        <groupId>org.apache.hadoop</groupId>

        <artifactId>hadoop-common</artifactId>

        <version>2.7.7</version>

    </dependency>

    <dependency>

        <groupId>org.apache.pig</groupId>

        <artifactId>pig</artifactId>

        <version>0.17.0</version>

    </dependency>

    <dependency>

        <groupId>org.apache.hadoop</groupId>

        <artifactId>hadoop-mapreduce-client-jobclient</artifactId>

        <version>2.7.7</version>

        <scope>provided</scope>

    </dependency>

</dependencies>

2、实现自定义函数

(1)自定义的运算函数:根据员工的薪水,判断薪水的级别,需要继承EvalFunc类。



package pig;

import java.io.IOException;

import org.apache.pig.EvalFunc;

import org.apache.pig.data.Tuple;

//根据员工的薪水,判断薪水的级别

//调用  emp2 = foreach emp generate empno,ename,sal,运算函数(sal)

// emp2 = foreach emp generate
empno,ename,sal,pig.CheckSalaryGrade(sal);

public class CheckSalaryGrade extends
EvalFunc<String>{

    @Override

    public String
exec(Tuple tuple) throws IOException {

        // 调用运行函数

        //tuple传递的参数值

        int sal = (Integer) tuple.get(0);

        if(sal <1000) return "Grade A";

        else if(sal>=1000 && sal<3000)
return "Grade B";

        else return "Grade C";

    }

}

(2)自定义的过滤函数:查询薪水大于2000的员工,需要继承FilterFunc类。



package pig;

import java.io.IOException;

import org.apache.pig.FilterFunc;

import org.apache.pig.data.Tuple;

//查询薪水大于2000的员工

//调用
emp3 = filter emp by 过滤函数(sal)

//  emp3 = filter
emp by pig.IsSalaryTooHigh(sal);

public class IsSalaryTooHigh extends FilterFunc {

    @Override

    public Boolean
exec(Tuple tuple) throws IOException {

        //取出薪水

        int sal = (Integer) tuple.get(0);

        return sal>2000?true:false;

    }

}

3、打包并上传至虚拟机中

打包:mvn clean package

二、在Pig中注册并使用自定函数

1、在Pig中注册生成的jar包

register  ~/pig-xxxx.jar

2、在Pig中利用自定义函数进行查询

emp2 = foreach
emp generate empno,ename,sal,pig.CheckSalaryGrade(sal);

dump emp2;

 
sal2 = filter
emp by pig.IsSalaryTooHigh(sal);

dump sal2 ;

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

粉尘伴终生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值