Apache Pig学习笔记之内置函数(三)

1 简介 Pig附带了一些的内置函数,这些函数包括(转换函数,加载和存储函数,数学函数,字符串函数,以及包和元组函数),在Pig里面主要有二种函数分别是内置函数和自定义的UDF函数,他们区别在于 第一:内置函数不需要被注册,因为Pig本身知道他们在哪里 第二:内置函数不需要定义引用路径,因为Pig本身知道在哪里能找到他们 2 动态调用 Java里面已经存在大量的工具类库,那么在Pig里面,我们也可以通过反射来灵活的定义某一类你需要用到的函数,例如下面的例子 当前,动态调用可以被用于任何的静态函数:  可以接收无参数或接收一些string,int,long,double,float,arrays这几种类型  返回类型包括字符串,int,long,double,float 3 Eval函数 3.1 Avg 用法:avg(price) 计算单列值的平均数,忽略Null值,在使用Group All或Group单列后可使用。 3.2 Concat 用法:contact(expression1,expression2)拼接两个字段的值为一个字符串,如果其中一个为Null,则结果用Null 3.3 Count 用法:count(expression) 统计在一个bag中所有元素的数量,不包含null值统计,同时需要group前提支持。 3.4 Count_Star 用法和count类型,不同之处在于Count_Star包含null统计 3.5 Diff 用法:diff(expression1,expression2),比较一个tuple中的两个fields集合的差异性,通linux或python里面的diff函数类似 3.6 isEmpty 用法:IsEmpty(expression1)判断一个bag或map是否为空(没有数据),可以使用在filter过滤数据中 3.7 max 用法:max(expression)计算单列中最大的数值值,或者字符串的最大值(字典排序),同count一样需要Group支持 3.8 min 用法:min(expression)计算单列中最小的数值值,或者字符串的最小值(字典排序),同count一样需要Group支持 3.9 pluckTuple 用法: ,给指定关系加一个字符串前缀 3.10 Size 用法:size(expression)计算任何pig字符串的大小长度,或者集合类型的的长度。 3.11 Subtract 用法:subtract(expression1,expression2),对两个bag里面的tupe做差值操作,并返回差值部分一个新的bag 3.12 Sum 用法sum(expression)对某列求和,同聚合函数都一样需要提前group。 3.13 Tokenize 用法 tokenize(expression,‘field_delimiter’)按指定分隔符拆分一句话,然后转成一系列的words,可以用来做wordcount的经典函数。 4 加载/存储函数 Load和store函数决定了数据怎样加载到pig里和怎么从pig里输出,pig提供了一系列load和store函数,当然你可以通过udf函数重写你自己定制的加载和存储函数。 4.1 处理压缩 压缩的支持是通过pig的加载和存储函数来决定的 PigStorage和TextLoader支持gzip和bzip压缩包括读和写,BinStorgae不支持压缩,为了处理gzip压缩的文件,输入和输出的文件必须要有一个.gz扩展后缀。 Gzip文件不能被切分为多个map,这意味着map的数量,就等于文件的数量。 为了处理bzip 的压缩文件,输入输出的文件也必须有一个bz或bz2的后缀名,bzip压缩可以被切分为多个map块执行。 Pig能够正确的读取和写入压缩文件,只要原始文件是正确的压缩方式,如果仅仅修改后缀或起个后缀名为.gz或.bz那么是不正确的方式,例子: 4.2 BinSotrage 能够加载和存储机器可读的格式,很少有人使用,而且有一些类型丢失bug,所以在这里就不详细介绍了 4.3 JsonLoader,JsonStorage 加载和存储json的数据的load和store函数 4.4 PigDump 存储数据使用UDF-8格式 4.5 PigStorage 加载和存储结构化的文件数据 用法: PigStorage(field_delimiter,options) 参数1:加载的分割符,必须使用单引号引起来 参数2:扩展项,使用比较少,不详细说明 此函数是pig默认的加载和存储函数,支持压缩,输入文件可以是一个文件,一个目录,或者一组目录。 复合数据类型的在PigStorage里面的存储和展示方式: Tuple:(item1,item2,item3),空值也是有效的值存储为:() Bag:{code},{(tuple)},空值有效:{} Map:[key1#value,key2#value],空值有效[] 4.6 TextLoader 加载非结构化数的据,使用UTF-8格式,每个产生的结果的tuple包括一个单个字段,和一行输入的文本,TextLoader也支持压缩,但是会受到一定限制,此外 TextLoader不支持存储数据。 4.7 HbaseStorage 加载和存储数据来自Hbase表 用法同PigStorage类似,需要指定分割符,和加载选项HbaseStorage(’columns’,’option’) 4.8 AvroStorage 加载和存储数据来自Avro文件 4.9 TrevniStorage 加载和存储来自trevniStorage的文件 5 数学函数 5.1 ABC 绝对值 5.2 ACOS 反余弦 5.3 ASIN 反正弦 5.4 ATAN 反正切 5.5 CBRT 立方根 5.6 CEIL 近1法取整数 5.7 COS 余弦 5.8 COSH 双曲余弦 5.9 EXP 指数 5.10 FLOOR 四舍五入取整 5.11 LOG 基于e的对数 5.12 LOG10 以10为底的对数 5.13 RANDOM 生成一个介于0.0到1.0之间的小数 5.14 ROUND 返回最近的整数 5.15 SIN 正弦 5.16 SINH 双曲正弦 5.17 SQRT 平方根 5.18 TAN 正切 5.19 TANH 双曲正切 6 字符串函数 6.1 EndSwith 用法:EndsWith(“foobar”,”bar”)返回true,以某个字符串结尾 6.2 EqualsIgnoreCase 比较两个字符串忽略大小写 6.3 IndexOf 返回要查询的字符串在目标源中的首个位置索引 6.4 Last_Index_of返回要查询的字符串在目标源中的最后一个位置索引 6.5 Lower 转小写 6.6 Ltrim 忽略左边空格 6.7 Regex_Extract 正则提取需要返回的字符串 用法:REGEX_EXTRACT (string, regex, index), 第一参数:原始字符串 第二参数:正则表达式 第三参数:返回数据的索引下标 例子如下: 我们想要从192.168.1.5:8080中,得到ip地址,该怎么写,非常简单: REGEX_EXTRACT (“192.168.1.5:8080”, “(.*):(.*)”, 1),即可 6.8 Regex_Extract_All 返回所有的以指定正则表达式拆分后的tuple元组: 将会返回类似一个数组,里面装了以冒号分开的二个元素 6.9 Replace 替换一个存在的字符串成一个新的字符串 用法:REPLACE(string, 'regExp', 'newChar'); 6.10 Rtrim 忽略右边空格 6.11 StartsWith 查询以某个字符串开头的函数 6.12 StrSplit 用法:STRSPLIT(string, regex, limit) Limit代表返回元素的个数 6.13 SubString 从一个字符串中截取一个新的字符串 用法:SUBSTRING(string, startIndex, stopIndex) 通java里的字符串截取类似 6.14 Trim 忽略左右空格 6.15 Ucfirst 将每个字符串的首个字母,转换为大写 6.16 Upper 转换为大写 7 日期函数 7.1 AddDuration 指定日期上新加一个日期 7.2 CurrentTime 返回当前的时间戳 7.3 DaysBetween 返回两个日期之间的天数 7.4 GetDay 从一个日期中获取当前的日期天数 7.5 GetHour 从一个日期中获取当前的小时数 7.6 GetMilliSecond 从一个日期中获取毫秒 7.7 GetMinute从一个日期中获取分钟 7.8 GetMonth 从一个日期中获取月份 7.9 GetSecond 从一个日期中获取秒 7.10 GetWeek 从一个日期中获取周 7.11 GetWeekYear 返回一周年的日期 7.12 GetYear 从一个日期中获取年份 7.13 HoursBetween 返回两个日期间的小时数 7.14 MilliSecondsBetween 返回两个日期间的毫秒数 7.15 MinutesBetween 返回两个日期间的分钟数 7.16 MonthsBetween 返回两个日期间的月份数量 7.17 SecondsBetween 返回两个日期间的秒数 7.18 SubtractDuration 返回一个日期对象减去指定的日期后的时间 7.19 ToDate 根据参数返回一个DateTime对象 7.20 ToMilliSeconds 返回当前的毫秒数 7.21 ToString 转换日期为字符串 7.22 ToUnixTime 转换为unix格式的时间 7.23 WeeksBetween 返回两个日期直接的周数 7.24 YearsBetween 返回两个日期间的年数 8 Tuple,Bag,Map 函数 8.1 TOTUPLE 转换一个或多个字段,为一个tuple 8.2 TOBAG 转换一个或多个表达式为bag 8.3 TOMAP 转为K/V形式进入一个map集合 8.4 TOP 返回前n个元组包里面的元组,例子

原文发布于微信公众号 - 我是攻城师(woshigcs)

原文发表时间:2015-03-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小小挖掘机

来学习几个简单的Hive函数啦

咳咳,今天来介绍一下几个Hive函数吧,先放一张我登哥划水的照片,希望大家也做一只自由的鱼儿,在知识的海洋里游呀游,嘻嘻! ? 今天我们来介绍几个Hive常用的...

4204
来自专栏AhDung

【手记】注意BinaryWriter写string的小坑——会在string前加上长度前缀length-prefixed

之前以为BinaryWriter写string会严格按构造时指定的编码(不指定则是无BOM的UTF8)写入string的二进制,如下面的代码:

2213
来自专栏开发与安全

《linux c 编程一站式学习》课后部分习题解答

1、假设变量x和n是两个正整数,我们知道x/n这个表达式的结果要取Floor,例如x是17,n是4,则结果是4。如果希望结果取Ceiling应该怎么写表达式呢?...

3846
来自专栏aCloudDeveloper

Java中Properties类的操作

    知识学而不用,就等于没用,到真正用到的时候还得重新再学。最近在看几款开源模拟器的源码,里面涉及到了很多关于Properties类的引用,由于Java已经...

20210
来自专栏绿巨人专栏

TypeScript中的怪语法

4155
来自专栏me的随笔

Python知识梳理

我们可以使用type()函数类获取对象的类型,Python3中内置数据类型包括:None,int,float,complex,str,list,dict,tup...

1272
来自专栏Java技术栈

Java:关于main方法的10道面试题

大年初三好,春节第三天了。感觉假期过得好快,东西也丢得快。 假期吃喝玩乐之余也来温故一下Java知识,下面给大家整理了10道Java main方法的经典面试题,...

36011
来自专栏calvin

【nodejs】让nodejs像后端mvc框架(asp.net mvc)一样处理请求--参数自动映射篇(6/8)

路由、action的扫描、发现、注册搞定之后,后来我发现在我们的action里面获取参数往往都是通过request对象来一个一个获取。同样的一行代码我们不厌其烦...

1092
来自专栏Ryan Miao

java基础面试题

参考:http://blog.csdn.net/jackfrued/article/details/44921941 说未经允许不转载,我只好参考了。 1.面向...

3695
来自专栏绿巨人专栏

TypeScript中的怪语法

1113

扫码关注云+社区