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个元组包里面的元组,例子:
- 浏览: 1056268 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1441)
- 软件思想&演讲 (9)
- 行业常识 (250)
- 时时疑问 (5)
- java/guava/python/php/ruby/R/scala/groovy (213)
- struct/spring/springmvc (37)
- mybatis/hibernate/JPA (10)
- mysql/oracle/sqlserver/db2/mongdb/redis/neo4j/GreenPlum/Teradata/hsqldb/Derby/sakila (268)
- js/jquery/jqueryUi/jqueryEaseyUI/extjs/angulrJs/react/es6/grunt/zepto/raphael (81)
- ZMQ/RabbitMQ/ActiveMQ/JMS/kafka (17)
- lucene/solr/nuth/elasticsearch/MG4J (167)
- html/css/ionic/nodejs/bootstrap (19)
- Linux/shell/centos (56)
- cvs/svn/git/sourceTree/gradle/ant/maven/mantis/docker/Kubernetes (26)
- sonatype nexus (1)
- tomcat/jetty/netty/jboss (9)
- 工具 (17)
- ETL/SPASS/MATLAB/RapidMiner/weka/kettle/DataX/Kylin (11)
- hadoop/spark/Hbase/Hive/pig/Zookeeper/HAWQ/cloudera/Impala/Oozie (190)
- ios/swift/android (9)
- 机器学习&算法&大数据 (18)
- Mesos是Apache下的开源分布式资源管理框架 (1)
- echarts/d3/highCharts/tableau (1)
- 行业技能图谱 (1)
- 大数据可视化 (2)
- tornado/ansible/twisted (2)
- Nagios/Cacti/Zabbix (0)
- eclipse/intellijIDEA/webstorm (5)
- cvs/svn/git/sourceTree/gradle/jira/bitbucket (4)
- jsp/jsf/flex/ZKoss (0)
- 测试技术 (2)
- splunk/flunm (2)
- 高并发/大数据量 (1)
- freemarker/vector/thymeleaf (1)
- docker/Kubernetes (2)
- dubbo/ESB/dubboX/wso2 (2)
最新评论
发表评论
-
CDH与原生态hadoop之间的区别
2017-07-26 12:45 997需要认识的几个问题 ------------------- ... -
Cloudera的CDH和Apache的Hadoop的区别
2017-07-26 12:49 579目前而言,不收费的Hadoop版本主要有三个(均是国外厂商) ... -
大数据、云计算系统高级架构师课程学习路线图
2017-07-24 17:10 602大数据、云计算系统高级架构师课程学习路线图 大数据 ... -
Oozie简介
2017-07-24 12:17 1072在Hadoop中执行的任务有时候需要把多个Map/Reduc ... -
清理ambari安装的hadoop集群
2017-07-24 11:29 929本文针对redhat或者centos 对于测试集群,如果通 ... -
hawk大数据基础知识总结(2)
2017-05-13 15:13 522hawk 英[hɔ:k] 美[hɔk] n. 鹰; 霍克; ... -
hawk大数据基础知识总结(1)
2017-05-13 14:41 800一、大数据概述 1.1大 ... -
ambari是什么
2017-05-11 19:52 653Apache Ambari是一种基于Web的工具,支持Apa ... -
数据仓库中的Inmon与Kimball架构之争
2017-05-11 13:40 700对于数据仓库体系结构的最佳问题,始终存在许多不同的看法,甚至 ... -
Hive的meta 数据支持以下三种存储方式
2017-05-04 13:48 907测试环境下Hive总出问题 ... -
大数据要学习知识
2017-05-02 17:18 49501 技术层面 1.紧贴 ... -
Spark Streaming简介
2017-05-02 16:28 7521.1 概述 Spark Streaming 是Spark ... -
pentaho套件
2017-04-28 15:52 836有人统计过,在整个数据分析过程里,收集、整理数据的工作大致占全 ... -
Impala:新一代开源大数据分析引擎
2017-04-22 10:48 732大数据处理是云计算中非常重要的问题,自Google公司提出M ... -
Weka是什么
2017-04-10 13:17 1077Weka的全名是怀卡托智 ... -
解密Apache HAWQ ——功能强大的SQL-on-Hadoop引擎
2017-04-10 12:04 845一、HAWQ基本介绍 HAWQ ... -
Kettle的使用
2017-04-06 12:11 601Kettle是一款国外开源 ... -
clouder manager端口7180没有打开为什么
2017-03-27 10:56 1188修改 clouder-manager.repo新建内容我们需要 ... -
Impala与Hive的比较
2017-03-19 13:09 7901. Impala架构 Impala是Clo ... -
Cloudera Manager、CDH零基础入门、线路指导
2017-03-19 12:53 1269问题导读:1.什么是cloudera CM 、CDH?2.C ...
相关推荐
Pig基础教程涵盖了Pig语言的基本概念、语法、数据类型、操作符和内置函数,这些都是使用Pig进行数据处理和分析的基础。 首先,教程中会介绍Pig Latin的基本语法约定。Pig Latin语法遵循一定的规则,例如,小括号“...
3. **UDF(用户定义函数)扩展**:0.7.0版本提供了更多的内置UDF,同时也支持用户自定义UDF,这极大地增强了Pig的功能性和灵活性。用户可以通过编写Java代码或使用其他语言(如Python或JavaScript)来扩展Pig的功能...
- **新功能**:引入了一些新的内置函数和操作符,增强了数据处理的灵活性,比如窗口函数,支持更复杂的统计分析。 - **稳定性提升**:增强了错误处理和恢复机制,使得在大型数据处理过程中更加健壮。 4. **使用...
- **复杂查询**:对于需要执行多步操作的复杂查询,Pig提供了一系列丰富的内置函数和支持多种数据类型的能力。 #### 四、Pig的使用方式 Pig支持多种使用方式,包括: 1. **命令行模式**:通过`pig`命令进入交互式...
5. **用户定义函数(UDF)**:Pig 支持用户编写自己的 Java 或 Scala 函数,以扩展其内置的功能。这些 UDF 可以用于处理特定的数据类型、执行复杂的计算或集成自定义的算法。 6. **调试和日志**:Pig 提供了详细的...
在Pig Latin中,数据处理任务被表达为一系列的数据转换操作,这些操作通过一系列的内置函数和自定义函数(UDF,User Defined Functions)来实现。例如,你可以使用Pig Latin来清洗、过滤、聚合、连接等操作日志数据...
- Pig Latin是一种声明式的语言,支持多种内置函数和用户自定义函数(UDF),可以用来实现复杂的数据处理逻辑。这种语言的特点在于其简洁性和易于理解性,使数据科学家和分析师能够专注于业务逻辑而不是底层技术细节...
- **内置函数与扩展性**:Pig提供了一系列内置函数,并且支持用户自定义函数(UDF)以及通过流(streaming)的方式调用其他编程语言如Python、Perl等编写的脚本。 #### 排名模型评估示例 背景介绍了一个具体的场景——...
Pig Latin包含了一系列内置函数,例如LOAD用于加载数据,STORE用于保存结果,FOREACH用于遍历数据,GROUP用于分组,JOIN用于连接不同数据集,FILTER用于过滤,以及各种聚合函数如COUNT、SUM、AVG等。掌握这些基本...
猪-json 用于 Apache Pig 的 Mortar JSON 工具。... 使用 pig-json 优于 Pig 的内置 JsonStorage 的好处是 pig-json 读取任意 JSON 数据而无需元数据文件,而 Pig 内置的 JsonStorage 只能读取它使
- **编译器支持**:Pig系统内置了一个强大的编译器,能够将Pig Latin脚本编译成物理执行计划,最终在Hadoop平台上运行。这使得用户无需深入了解底层Map-Reduce框架的具体细节即可完成数据处理任务。 - **调试环境**...
3. 数据转换:通过Pig的内置函数或自定义函数,可以提取出日志中的特定字段,如IP地址、时间戳、请求类型等,进行进一步分析。 4. 数据分析:利用Pig的`GROUP BY`、`COUNT`、`AVG`等聚合操作,可以计算不同IP的请求...
- **hive函数大全.doc**:这可能是一份详细列出Hive支持的各种内置函数的参考手册,帮助用户在编写HQL时查找和使用各种函数。 - **hive_installation and load data.doc**:这份文档可能介绍了如何安装Hive以及如何...
例如,LOAD用于加载数据,STORE用于保存结果,FOREACH用于迭代数据,GROUP用于分组,JOIN用于连接不同表,FILTER用于筛选数据,ORDER BY用于排序,以及各种内置函数如COUNT、SUM、AVG等用于统计计算。 2. **数据...
2. **Pig Latin语言**:Pig Latin是Pig的内置数据处理语言,类似于SQL但更专注于数据分析。它由一系列操作构成,包括加载数据、转换数据、过滤、分组、排序、连接、合并、输出等。例如,`load`用于加载数据,`...
2. **处理数据**:接下来,可以使用Pig提供的内置函数来处理数据,比如分组统计每个IP地址出现的次数。 ```bash grouped = GROUP records BY ip; counts = FOREACH grouped GENERATE group, COUNT(records) AS ...
由于不依赖OpenCV,Pigo库可能内置了自己的特征提取和匹配策略,这可能涉及到一些图像处理的基本操作,如灰度化、直方图均衡化以及边缘检测等。 在实际应用中,Pigo库可能提供了以下API接口: 1. 加载模型:用户...
Pig提供了数据抽象,称为“ Pig tuples”,允许用户处理各种数据类型,同时内置了丰富的数据处理函数,如JOIN、FILTER、GROUP BY等。Pig的灵活性和可扩展性使得它在数据挖掘和分析中广受欢迎。 Hive和Pig虽然都可以...