大数据笔记(十八)——Pig的自定义函数

Pig的自定义函数有三种:
1、自定义过滤函数:相当于where条件
2、自定义运算函数:
3、自定义加载函数:使用load语句加载数据,生成一个bag
默认:一行解析成一个Tuple
需要MR的jar包

一.自定义过滤函数

package demo.pig;

import java.io.IOException;

import org.apache.pig.FilterFunc;
import org.apache.pig.data.Tuple;

//实现自定义的过滤函数,实现:查询过滤薪水大于2000的员工
public class IsSalaryTooHigh extends FilterFunc{

    @Override
    public Boolean exec(Tuple tuple) throws IOException {
        /*参数tuple:调用的时候 传递的参数
         *
         * 在PigLatin调用
         * myresult1 = filter emp by demo.pig.IsSalaryTooHigh(sal)
         */
        //取出薪水
        int sal = (int) tuple.get(0);
        return sal>2000?true:false;
    }

}

二.自定义运算函数

package demo.pig;

import java.io.IOException;

import org.apache.pig.EvalFunc;
import org.apache.pig.data.Tuple;

//根据员工的薪水判断级别
public class CheckSalaryGrade extends EvalFunc<String>{

    @Override
    public String exec(Tuple tuple) throws IOException {
        // myresult2 = foreach emp generate ename,sal,demo.pig.CheckSalaryGrade(sal);

        int sal = (int)tuple.get(0);
        if(sal<1000) return "Grade A";
        else if(sal>=1000 && sal<3000) return "Grade B";
        else return "Grade C";
    }

}

三.自定义加载函数

package demo.pig;

import java.io.IOException;

import org.apache.hadoop.fs.Path;
import org.apache.hadoop.mapreduce.InputFormat;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.RecordReader;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.pig.LoadFunc;
import org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigSplit;
import org.apache.pig.data.BagFactory;
import org.apache.pig.data.DataBag;
import org.apache.pig.data.Tuple;
import org.apache.pig.data.TupleFactory;

public class MyLoadFunc extends LoadFunc{

    //定义一个变量保存输入流
    private RecordReader reader ;

    @Override
    public InputFormat getInputFormat() throws IOException {
        // 输入数据的格式:字符串
        return new TextInputFormat();
    }

    @Override
    public Tuple getNext() throws IOException {
        // 从输入流读取一行,如何解析生成返回的tuple
        //数据:I love Beijing
        Tuple result = null;
        try{
            //判断是否读入了数据
            if(!this.reader.nextKeyValue()){
                //没有数据
                return result; //----> 是null?
            }

            //数据:I love Beijing
            String data = this.reader.getCurrentValue().toString();

            //生成返回的结果:Tuple
            result = TupleFactory.getInstance().newTuple();

            //分词
            String[] words = data.split(" ");

            //每一个单词单独生成一个tuple,再把tuple放入bag中
            //再把这个bag放入result中
            //创建一个表
            DataBag bag = BagFactory.getInstance().newDefaultBag();
            for(String w:words){
                //为每个单词生成一个tuple
                Tuple aTuple = TupleFactory.getInstance().newTuple();
                aTuple.append(w); //将单词放到tuple中

                //把这些tuple放入一个bag中
                bag.add(aTuple);
            }

            //把bag放入result
            result.append(bag);

        }catch(Exception ex){
            ex.printStackTrace();
        }

        return result;
    }

    @Override
    public void prepareToRead(RecordReader reader, PigSplit arg1) throws IOException {
        // RecordReader reader:代表HDFS输入流
        this.reader = reader;
    }

    @Override
    public void setLocation(String path, Job job) throws IOException {
        // 从HDFS输入的路径
        FileInputFormat.setInputPaths(job, new Path(path));
    }

}

注册jar包: register define
register /root/temp/p1.jar

myresult3 = load ‘/input/data.txt‘ using demo.pig.MyLoadFunc();
定义别名:define myload demo.pig.MyLoadFunc;

原文地址:https://www.cnblogs.com/lingluo2017/p/8654481.html

时间: 2024-11-14 13:13:15

大数据笔记(十八)——Pig的自定义函数的相关文章

大数据笔记(八)——Mapreduce的高级特性(A)

一.序列化 类似于Java的序列化:将对象-->文件 如果一个类实现了Serializable接口,这个类的对象就可以输出为文件 同理,如果一个类实现了的Hadoop的序列化机制(接口:Writable),这个类的对象就可以作为输入和输出的值 例子:使用序列化  求每个部门的工资总额 数据:在map阶段输出k2部门号 v2是Employee对象 reduce阶段:k4部门号 v3.getSal()得到薪水求和-->v4 Employee.java:封装的员工属性 package saltota

玩转大数据系列之Apache Pig高级技能之函数编程(六)

原创不易,转载请务必注明,原创地址,谢谢配合! http://qindongliang.iteye.com/ Pig系列的学习文档,希望对大家有用,感谢关注散仙! Apache Pig的前世今生 Apache Pig如何自定义UDF函数? Apache Pig5行代码怎么实现Hadoop的WordCount? Apache Pig入门学习文档(一) Apache Pig学习笔记(二) Apache Pig学习笔记之内置函数(三) 玩转大数据系列之Apache Pig如何与Apache Lucen

大数据营销十大切入点

许多人感觉到大数据时代正在到来,但往往只是一种朦胧的感觉,对于其真正对营销带来的威力可以用一个时髦的词来形容——不明觉厉.实际上,还是应尽量弄明白,才会明白其厉害之处.对于多数企业而言,大数据营销的主要价值源于以下几个方面. 第一,用户行为与特征分析.显然,只要积累足够的用户数据,就能分析出用户的喜好与购买习惯,甚至做到“比用户更了解用户自己”.有了这一点, 才是许多大数据营销的前提与出发点.无论如何,那些过去将“一切以客户为中心”作为口号的企业可以想想,过去你们真的能及时全面地了解客户的需求与

论大数据的十大局限

“忽如一夜春风来,千树万树梨花开”,似乎在一夜之间,大数据就红遍了南北半球,,大数据被神化得无处不在,无所不包,无所不能.这里面有认识上的原因,也有故意忽悠的成份.笔者以为,越是在热得发烫的时候,越是需要有人在旁边吹吹冷风.在这里谈大数据的十大局限性,并非要否定其价值.相反,只有我们充分认识了大数据的特点和优劣势,才能更加有效地对其进行采集.加工.应用,充分挖掘和发挥其价值.         1.数据噪声:与生俱来的不和谐 大数据之所以为大数据,首先是因为其数据体量巨大.然而,在这海量的数据中,

蔡先生论道大数据之(十五) :什么是数据化运营?

数据化运营讨论(1) 近现代营销理论代表思想是4P理论,4P是指产品.价格.渠道.促销,它的核心是产品,其他要素都是围绕产品这个核心来的,进入21世纪人们又提出了4C的营销理论,包括消费者.成本.方便性.沟通交流,它的核心是用户是消费者,一切以消费者为核心,这也是目前大多数企业市场营销战略核心思想. 社会在进步,4C理论之后来到了大数据时代,所面对的行业状况是,白热化的市场竞争,越来越严苛的营销预算.堆积如山的海量数据,迫使企业寻找更加适合的营销思路和方法.目前行业主流的理论是3P3C,包括概率

蔡先生论道大数据之(十六) :穷则思变

数据化运营讨论(2) 数据化运营的理念与技术对企业来说是革命性的,它能将现在"卖方市场"商业状态变成为"买方市场". "穷则思变"古话说的好,在当下传统营销方式手段很难明显提升业绩和市场竞争力时"数据化运营"的理念和技术就成为企业未来打破竞争,提升自我强有力地商业武器. 企业通过对数据的分析和挖掘,运营不在盲目,真正做到心中有数,有的放矢.举例,传统的营销活动带来的问题:"我知道投入的广告费有一半打了水漂,收效甚微,

蔡先生论道大数据之十: 企业如何入手大数据战略(1)

今天之后的几章我们重点讨论企业如果要利用大数据应该从那几个方面入手,我粗粗的总结了一下大致分三个方面,这三个方面做到为了,恭喜你你的企业正开始享受和拥有大数据来的红利和价值. 具体入手之前,我们先要明确一点就是首先企业管理层需要有清晰思路然后从上到下认真贯彻,管理层还要对预期的业务影响要有个清晰的认识,能够给出从数据收集.模型建立到企业文化转型的一揽子方法,避免掉进"数据可以为企业做那些"这样的思维陷阱中去. 企业定制大数据战略,需要注意三个关键点,说白了也就根据前面文章总结出来的精髓

自学it18大数据笔记-第一阶段Java-day16-day17-day18-day19--day20-day21-day22——会持续更新

转行大数据领域,没报班,自学试试,能坚持下来就以后好好做这行,不能就--!准备从现有这套it18的视屏残本开始--自学是痛苦的,发博客,算是监督自己,督促自己坚持学下去. (教学视屏是it18做活动送的,虽不全,但徐培成老师讲的真心不错,特此感谢it18掌--帮你们打打广告) 笔记为自学时记录,如有错误,欢迎指正,不胜感激! 笔记分享:自学it18大数据笔记-第一阶段Java-day16-day17-day18-day19--day20-day21-day22--会持续更新-- 第一阶段Java

自学it18大数据笔记-第三阶段Spark-day14;Spark-day15(开始试水找工作了)——会持续更新……

写在最前:转行大数据领域,没报班,自学试试,能坚持下来以后就好好做这行,不能就--!准备从现有这套it18掌的视屏残本开始--自学是痛苦的,发博客和大家分享下学习成果--也是监督自己,督促自己坚持学下去. (教学视屏是it18掌做活动送的,视屏不是很全,课堂笔记和源码等课堂相关资料也未放出,但徐培成老师课讲的真心很好,感兴趣的不妨听听,特此感谢it18掌--帮他们打打广告) 笔记为自学时记录,如有错误,欢迎指正,不胜感激!现已广州转移至上海,开始试水找工作了,欢迎小伙伴们加qq或微博沟通交流(Q