阅读更多
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)
本公众号的内容是有关搜索和大数据技术和互联网等方面内容的分享,也是一个温馨的技术互动交流的小家园,有什么问题随时都可以留言,欢迎大家来访!