http://wenku.baidu.com/link?url=yb7KnpSj9nHxWk_MsEVUezvB24evRf9wR87FX0dTT77pGXNXi6k3o_kTmAkBrpIHTqo66cr8P5cGOdHJKzqFsWFVt6xgvzWs5cxWKfcs6ee

这里面总结的挺全面,尤其最后的一些小例子,很使用。我都写过,不过还是借鉴一下比较好



我总结了一写有用的重点:



pig的计算函数,过滤函数,加载函数和存储函数:

加载/存储函数:PigStorage, BinStorage, BinaryStorage, TextLoader, PigDump

计算函数: AVG, COUNT, CONCAT, COUNTSTAR, DIFF, MAX, MIN, SIZE, SUM, TOKENIZE

过滤函数IsEmpty:sjnd = filter grpd by not IsEmpty(divs);

用户自定义函数(UDF)

public abstract class EvalFunc<T {

public abstract T exec(Tuple input) throws IOException;

public List<FuncSpec getAvgToFuncMapping() throws FrontendException;

public FuncSpec outputSchema() throws FrontendException;

}

输入元组的字段包含传递给函数的表达式,输出是泛型;对于过滤函数输出就是Boolean类型。建议尽量在

getAvgToFuncMapping()/outputSchema()申明输入和输出数据的类型,以便Pig进行类型转换或过滤不匹配类型的错误值。

GruntREGISTER pig-examples.jar;

DEFINE isGood org.hadoopbook.pig.IsGoodQuality();

加载UDF

public LoadFunc {

public void setLocation(String location, Job job);

public InputFormat getInputFormat();

public void prepareToRead(RecordReader reader, PigSplit split);

public Tuple next() throws IOException;

}







foreach中使用$+数字代表某个位置的列。下面语句中gain与gain2的值一样:

prices = load 'NYSE_daily' as (exchange, symbol, date, open, high, low, close,volume, adj_close);

gain = foreach prices generate close - open;

gain2 = foreach prices generate $6 - $3;

在schema定义不确定或不清楚时,位置风格的引用是很有用的。使用“*”代表全部列,还可以使用“..”表示范围内的列,这对简化命令文本很有用:

prices = load 'NYSE_daily' as (exchange, symbol, date, open,high, low, close, volume, adj_close);

beginning = foreach prices generate ..open; -- exchange, symbol, date, open

middle = foreach prices generate open..close; -- open, high, low, close

end = foreach prices generate volume..; -- volume, adj_close









复杂的数据类型,比如元组(touple),包(bag)和映射(map)。这些复杂类型的数据,一般从文件加载或由一些关系操作而得来。

tuple: (1, ‘hello’) //任何类型的字段序列

Map查找 m#k 在映射m中键k对应的值 items’Coat’

map: [‘a’ ‘hello’] //一组键值对,键必须是字符数组

类型转换 (t)f 将字段t转换成f类型 (int)year





包是元组的无序集合,比如{(1,’value’),(‘v1’,v2)}。而关系则是有名字的包,这个名称成为关系的别名。一般情况下,一个Pig语句会产生一个关系。

通过文字直接创建一个关系是非法的,比如:

A = {(1,2)} –非法





将一个关系的字段投影为一个新的关系也是非法的,比如:

B = a.$0 –非法





作为一个变通方案,你可以用以下语句实现该功能:

B = foreach A genereate $0





将来的Pig版本也许会统一包和关系的处理模式,以消除这种不一致。





join





连接一组key:





jnd = join daily by symbol, divs by symbol;





连接两组key:





jnd = join daily by (symbol, date), divs by (symbol, date);





外连接:

jnd = join daily by (symbol, date) left outer, divs by (symbol, date);

jnd = join daily by (symbol, date) right outer, divs by (symbol, date);

jnd = join daily by (symbol, date) full outer, divs by (symbol, date);

多表连接:





A = load 'input1' as (x, y);





B = load 'input2' as (u, v);





C = load 'input3' as (e, f);





alpha = join A by x, B by u, C by e;





自连接(必须准备两份数据):





divs1 = load 'NYSE_dividends' as (exchange:chararray, symbol:int,date:chararray, dividends);





divs2 = load 'NYSE_dividends' as (exchange:chararray, symbol:int,date:chararray, dividends);





jnd = join divs1 by symbol, divs2 by symbol;





increased = filter jnd by divs1::date < divs2::date and





divs1::dividends < divs2::dividends;

pig函数以及关键字 的一些实例应用的总结(来自pig笔记)的更多相关文章

  1. 关于js函数,方法,对象实例的一些说明

    朋友们大家好,好久没有更新文章了,最近正好有空就想着写点什么吧,加上这段时间总是能听到一些朋友们问关于js函数,方法,对象实例到底有什么区别这个问题,所以今天就献丑来简单说明一些吧! 其实这些主要都是 ...

  2. 【python基础语法】常用内置函数、关键字、方法和之间的区别(小结)

    ''' 关键字: False:bool数据类型 True:bool数据类型 None:表示数据的内容为空 and:逻辑运算符:与 or:逻辑运算符:或 not:逻辑运算符:非 in:身份运算符,判断变 ...

  3. oracle常用函数及关键字笔记

    --函数及关键字--1.trim,ltrim,rtrim 去除字符,无指定默认去除空格SELECT TRIM('a' FROM 'aafhfhaaaaaaaa'), LTRIM('aafhfhaaaa ...

  4. js javascript map函数去重功能的使用实例

    js javascript map函数去重功能的使用实例 先上一个实战例子代码 var map = new Map(); for(var i=0; i<=9; i++){ map.set(i,i ...

  5. Mysql多实例安装+主从复制+读写分离 -学习笔记

    Mysql多实例安装+主从复制+读写分离 -学习笔记 .embody{ padding:10px 10px 10px; margin:0 -20px; border-bottom:solid 1px ...

  6. 窥探Swift之函数与闭包的应用实例

    今天的博客算是比较基础的,还是那句话,基础这东西在什么时候都是最重要的.说到函数,只要是写过程序就肯定知道函数是怎么回事,今天就来讨论一下Swift中的函数的特性以及Swift中的闭包.今天的一些小实 ...

  7. 聊聊传统oo和js的某些对比——对象/函数/new关键字等

    自己的学习记录,写的短点可以以后短时间内理清一些疑惑,看前要求你至少了解js中关于原型链等基本概念,因为文章直接以总结的形式理出知识点,没有去解释一些基本的概念! 1.1.熟记两句话,预预热 1. 函 ...

  8. [Reprint] C++函数模板与类模板实例解析

    这篇文章主要介绍了C++函数模板与类模板,需要的朋友可以参考下   本文针对C++函数模板与类模板进行了较为详尽的实例解析,有助于帮助读者加深对C++函数模板与类模板的理解.具体内容如下: 泛型编程( ...

  9. 窥探 Swift 之 函数与闭包的应用实例

    今天的博客算是比较基础的,还是那句话,基础这东西在什么时候 都是最重要的.说到函数,只要是写过程序就肯定知道函数是怎么回事,今天就来讨论一下Swift中的函数的特性以及Swift中的闭包.今天的一些小 ...

随机推荐

  1. Linux sort -n 与 -g 排序对比

    公司业务需要,天天用awk统计数值然后排序,出问题了,如下: count.sh 是一个统计脚本,把awk输出的值按占比.条数.类型 在重新输出 awk -F\| '{print $16}' *MQTT ...

  2. 解决com.fasterxml.jackson.databind.JsonMappingException: No suitable

    原因:直接翻译,json格式,不匹配. 这原因坑爹啊,因为json格式不正确算一种原因. 还有一种就是接收的bean没有getter,setter方法. 最坑的一种就是数据无法被反序列化,list,m ...

  3. java.sql.SQLException: **** [SQLServer]对象名 "XXXX"无效

    原因:进到数据库里面,但是没有选择数据库. 方法:检查数据源配置,这玩意容易看出.难得是多数据库操作时,切换数据源!

  4. struts2 Action获取表单传值(属性,类))

    http://blog.csdn.net/sd0902/article/details/8393157 求大神告知两种方法的不同点 都是写个set方法就行了

  5. 取list的值

    list.get(0):之类的我就不写了 我就写一个我老忘记的 Iterator it = list.iterator(); while(it.hasNext()){ Student stu = it ...

  6. Lintcode391 Number of Airplanes in the Sky solution 题解

    [题目描述] Given an interval list which are flying and landing time of the flight. How many airplanes ar ...

  7. 06 Nexus仓储/基础设施 - DevOps之路

    06 Nexus仓储/基础设施 - DevOps之路 文章Github地址,欢迎start:https://github.com/li-keli/DevOps-WiKi Nexus仓储官网简介: Th ...

  8. 最小费用最大流(luogu P3381 【模板】最小费用最大流)

    题目链接 题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S. ...

  9. 【机器学习】从SVM到SVR

    注:最近在工作中,高频率的接触到了SVM模型,而且还有使用SVM模型做回归的情况,即SVR.另外考虑到自己从第一次知道这个模型到现在也差不多两年时间了,从最开始的腾云驾雾到现在有了一点直观的认识,花费 ...

  10. 自定义Retrofit转化器Converter

    我们来看一下Retrofit的使用 interface TestConn { //这里的Bitmap就是要处理的类型 @GET("https://ss0.baidu.com/73F1bjeh ...