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