下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、云计算VOM使Hadoop 的普及和其生态系统的不断壮大并不令人感到意外。Hadoop 领域是 Hadoop 应用程序的编写。虽然编写 Map 和 Reduce 开发经验。g MapReduce 础上创建了更简单的过程语言抽象,为 Hadoop (SQL) MapReduce Latin 语言云计算VOM使Hadoop 的普及和其生态系统的不断壮大并不令人感到意外。Hadoop 领域是 Hadoop 应用程序的编写。虽然编写 Map 和 Reduce 开发经验。g MapReduce 础上创建了更简单的过程语言抽象,为 Hadoop (SQL) MapReduce Latin 语言写一。Pig
2、Latin 让Pig 示例开始介绍,并剖析该示例。Hadoop (Linux grep1 了在 Pig WARN warnings 1. Pigmessages=LOADSTOREO 型中实现它,则需要增加大量的代码。这使得学习 Hadoop 更深入地探讨Pig 语言,然后查看该语言的一些功能的其他示例PigLatin PigLatin Pig Latin 1 中看到该模式的最简单形式(一个转换Pig 如、long、float、double、chararray bytearraybincond 的条件运算符(Cternary 运算符)运算符(add、subtract、multiply、divi
3、demodulePig Latin 1 中看到该模式的最简单形式(一个转换Pig 如、long、float、double、chararray bytearraybincond 的条件运算符(Cternary 运算符)运算符(add、subtract、multiply、dividemodule。并且,如您所期望的那样,还PigLatin 语句都需要对关系进行操作(并被称为关系运算符1 FILTER 数据。此功能常用于从后续操作不再需要的关系中删除数据。FOREACH 符。FOREACH FILTER ORDERORDER 运算符提供了基于一个或多个字段对关系进行排序的功能。JOIN 或外部联接。
4、SPLIT 式将一个关系拆分成两个或两个以上关系的功能。最后,GROUP 1 Pig 1.PigLatin 关系运算符的不完整列表运算符 描述 FOREACH GROUP JOIN 联接两个或两个以上的关系LOAD 或外部联接ORDER SPLIT STORE Pig Latin Pig Latin Pig 线文档。现在尝试着手编写一些 Pig Hadoop Hadoop Cloudera Linux Hadoop Hive 和 Pig2 型虚拟机管理程序(VirtualBox KVMHadoop Hadoop Cloudera Linux Hadoop Hive 和 Pig2 型虚拟机管理程
5、序(VirtualBox KVMHadoop Hadoop Pig VMCloudera VM 1GB VMVirtualBox 来启动它,VirtualBox Linux Hadoop Hadoop Pig 通信的终PigLocal(本地)Hadoop 或 Hadoop (HDFS)下文中的单一 Java Hadoop (JVM) MapReduce Local Local Pig exectype Local Grunt Pig $pig-xPig 回(与 FILTER 定义的搜索条件相匹配)本身就是一个关系(以括号 () 为界2. Local gruntmessages=LOADgrun
6、twarns=FILTERmessagesBY$0MATCHESgruntDUMP(Dec1003:56:43localhostNetworkManager:ack():error(Dec10gruntwarns=FILTERmessagesBY$0MATCHESgruntDUMP(Dec1003:56:43localhostNetworkManager:ack():error(Dec1006:10:18localhostNetworkManager:check_one_route():(eth0)errorSTORE Mapreduce MapReduce 模式,必须首先确保 Hadoop
7、3 3. Hadoop $hadoopdfs-lsFound3drwxr-xr-x - hue02011-12-0805:2002011-12-0805:2002011-12-0805:20drwxr-xr-x -mapred$如3 Hadoop 来测试Pig。从启动Pig 开始,然后更改为您的HDFS 根,以确定HDFS 中是否可以看到外部所看到的结果(44. $ 2011-12-1006:39:44,276main2011-12-1006:39:44,601mainsystemat:2011-12-1006:39:44,988maingrunt cd hdfs:/gruntg.Main-L
8、oggingerrormessagesConnectingtohadoopfileconnectingtomap-reducePig Hadoop HDFS Pig 到 HDFS(55. gruntmkdirgruntcdgrunt ls Pig Hadoop HDFS Pig 到 HDFS(55. gruntmkdirgruntcdgrunt ls Pig cat 文件,查看其内容(只是看看它是否存在passwd 文件中为用户指定的外壳数量(passwd 文件中的最后一列HDFS passwd 66. gruntpasswd=LOAD/etc/passwdUSINGPigStorage(:)
9、AS(user:chararray, ,sgruntDUMPGROUP 运算符根据元组的外壳将元组分组到该关系中(7 7. grunt=GROUPpasswdBY;gruntDUMP; GROUP 运算符根据元组的外壳将元组分组到该关系中(7 7. grunt=GROUPpasswdBY;gruntDUMP; 运 算符来遍历分组中的每个元组,COUNT 出现的数量(88. gruntcounts=FOREACHgruntDUMPGENERATEgroup,myscript.pig Pig 支持大到的,DUMP DESCRIBE 运算符来生成一个关系架构的详细格式(字段和类型EXPLAIN EX
10、PLAIN 查看如何将物理运算符分组为 Map 和 Reduce 任务(也就是说,如何推导出数据表2 PigLatin 中表Pig 支持大到的,DUMP DESCRIBE 运算符来生成一个关系架构的详细格式(字段和类型EXPLAIN EXPLAIN 查看如何将物理运算符分组为 Map 和 Reduce 任务(也就是说,如何推导出数据表2 PigLatin 中表2.PigDESCRIBE DUMP EXPLAIN MapReduce Pig (UDF) 变得更强大。数。UDF Pig 支持自定义处理。UDF Pig UDF Pig 它是如此强大,Yahoo! Hadoop 40% 60% Pig
11、 Latin CPU Hadoop产Yahoo! 100,000 CPU 50% Yahoo! Pig 掘数据);在 AOL MapQuest 上也会发现它(用于分析和批量数据处理);而在LinkedIn 上,Pig 用于发现您可能认识的人。,Ebay 使用 Pig 来实现搜索优化,adyard PigPIG PigPig量0 Pig。Pig yahoo 捐献给apache 的一个项目,它是SQL-like 语言PIG PigPig量0 Pig。Pig yahoo 捐献给apache 的一个项目,它是SQL-like 语言MapReduce 上构建的 的东西。PigCygwin%export%
12、tarxzfpig- %exportpighelpPig一种是Local mode,也就是本地模式,这种模式下Pig 运行在一个JVM 里的是本 LocaligPlan%pig-x Hadoop模式了,这种模式下,PigMapReduce Jobs,并提Hadoop 集群去运行,集群可以是真实的分布式也可以是伪Hadoop模式了,这种模式下,PigMapReduce Jobs,并提Hadoop 集群去运行,集群可以是真实的分布式也可以是伪分布式。要想Pig能认识Hadoop你要告诉它Hadoop 的版本以及一些daemon 的信(也就是Namenode和 %exportNamenode Job
13、tracker HadoopConfPigClasspath%export NamenodeJobtracker% 2009-03-2921:22:20,489mainHExecutionEngineConnectingtohadoopfilesystemat:2009-03-2921:22:20,760mainHExecutionEngineConnectingtomap-reducejobtrackerat:Hadoop的Namenode和JobtrackerPIG Pig的.pig:点2.2PIG Pig的.pig:点2.2xuqiangubuntu:/hadoop/src/pig$ta
14、r zxvf pig-2.3 xuqiangubuntu:$ vim exportPIG_CLASSPATH=/hadoop/src/hadoop-明的是 pig 是能够运行在两种模式下:local 模式和 xuqiangubuntu:$ pig -x 2011-06-05 17:48:49,480 main g.Main - Logging error messages g.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop xuqiangubuntu:$ pig -x 2011-06-05 17:48
15、:49,480 main g.Main - Logging error messages g.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop ,xuqiangubuntu:/hadoop/src/pig/pig-0.8.1$ xuqiangubuntu:/hadoop/src/pig/pig-0.8.1$cd . |-|-|-script1- |-script2- -1directory,9UserID gruntlog = load excite-small.log as (user, time,
16、UserID gruntlog = load excite-small.log as (user, time, grunt describe grunt lmt = limit log gruntdump.4.1Utilityand4.2Dataread/write4.2Dataread/write4.3Diagnostic操4.4ypeand4.3Diagnostic操4.4ypeand4.5and4.5and4.6Retionalpig -0.8.1/tutorial/pigtmp$ local2011-06-05 18:46:54,039 main g.Main - Logging er
17、ror messages g.backend.hadoop.executionengine.HExecutionEngine 4.6Retionalpig -0.8.1/tutorial/pigtmp$ local2011-06-05 18:46:54,039 main g.Main - Logging error messages g.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop grunta=loadAusingPigStorage(,)as,gruntb=loadBusingPigStorag
18、e(,)as,求a,bgrunt c = union a, grunt dump grunt split o d egrunt dump grunt split o d egrunt dump gruntf=filtercby$1grunt dump gruntg=groupcbygrunt dump grunt h = group c gruntdump grunt i = foreach h generate grunt dump Couldnotresolvecounterusingimported:g.builtg.impl.builtin. grunt i = foreach h g
19、enerate grunt dump Couldnotresolvecounterusingimported:g.builtg.impl.builtin.gruntj=joinaby$2,bbysql中的连表查询,这是的条件是$2$2grunt k = foreach c generate $1, $1 * grunt dump 4.7WorkingwithUDF(userdefined1. 承自 EvalFunc这个抽象类,同时需要重写这个类的一方法:publicT exec(Tuple input) throws input.get(1)ARG2,input.getSize()得到传递的参
20、数的数量,这里就是 2.input.get(1)ARG2,input.getSize()得到传递的参数的数量,这里就是 2. xuqiangubuntu:/hadoop/src/pig/pig-0.8.1/myudfs$ cd xuqiangubuntu:/hadoop/src/pig/pig-0.8.1$pig -x gruntregistergruntAgruntregistergruntA=loadstudent_datausingPigStorage(,)as(name:chararray,grunt dump B;Apach g的一些基础概念及用法总Apach g Hadoop 使用
21、,可以在处理海量数据 N 倍。 pig来处理海量数据有 的,可以看 工程师写的这个 PPT。pig先给出两个pig参考手册1,pig参考手册2。本文的部分内容来自这两个手册,但涉及到翻译的部分,也是 翻译的,因此可能理解与英文有偏差,如果你觉得有疑义,可参考英文内在正式开始学习 Pig 之前,你首先要明白,配置好编辑器的 Pig 语法高亮是很有用的,它可以极Windows 下编写Pig 代码,好像还真没 轻量级的编辑器插件(Notepad+ (2)一个计(bag 示一个包pig交互模式下的输出,都遵循这样的约定, 如 何 配 置 Emacs 的 Pig 语 法 高 亮 。 此 插 件 是 一
22、个 很 好 的 选 择 :录下(也就是与.emacs配置文件在同一 下)“.piglatin.el”注意前面是有一个点的,也就是说将这个文件设置成隐藏文件,否则可能会误删了。然后,在 .emacs 文件(load-file这里假设了你的 .piglatin.el 文件放置的位置是在 /home/abc/ Emacs也有Windows 版的,如果你 Windows 下工作,完全可以Windows 下按 例如修改 表等,所以会比在 Linux 下使用要麻烦一些,具体请看这篇文章(bag(tuple(field 1234567 a1234.2 a3053.5 b799- a7992.6 a1 123
23、4567 a1234.2 a3053.5 b799- a7992.6 a1257.7 a1231.4A=LOADa.txtAS(col1:chararray,1234 C=FOREACHBGENERATEgroup,AVG(A.col5),DUMP 1234 col1:,col5:1(bag 下面, 依次来看看每一句 piga.txtchararray(字符串double, double。同时, 还给予了每一列别名,分别为 col1,col2,col6。这个别名在后面的 B=A(col2,col3, (1,2,3 9)2.6 6.2 localrootlocalhostpig$1 ,col5:
24、double,col6: 示了一个 A,是因为这里表示的是数据结构,而不表示具体数据有多少组。1234 (3,0,5),(a,3,0,5,3.5,2.1) 1 ,col5:double,col6: 示了一个 A,是因为这里表示的是数据结构,而不表示具体数据有多少组。1234 (3,0,5),(a,3,0,5,3.5,2.1) 1C:group: /DUMP C 就是将C 中的数据输出到控制台。如果要输出到文件,需要使用 计算每一种组合下的最后两列的平均值B B 想像成一行一行的数据(只不过这些行不是对称的FOREACH B GENERATEgroupB的第一项数据(pigA2、3、4列的组合赋
25、予的别名)C 的每一行里,第一项就是 B 中的group类似于(1,2,5)这样的东西。AVG(A.col5) pigAVGA 的名为 col5 A的时候, 已经给每一列起了个别名,col5AVG(A.col5) A col5 遍历到 B 的这一行时,要计算 AVG(A.col5),pig (a,1,2,3,4.2,9.8) 中的 4.2 到了这里 B:group:,col3: ,col4: ),A:col1: 1234567rootlocalhostpig$a1234.2 a3053.5 b799- a71234567rootlocalhostpig$a1234.2 a3053.5 b799
26、- a7992.6 a1257.7 a1231.4A=LOADa.txtAS(col1:chararray,123col5:double, B=COUNT(*); DUMP B;1B= 刚接触 pig 的时候,一定非常疑惑这样明显“不应该出错”的写法为什么行不通。 A=LOADa.txtAS(col1:chararray,1234 C=FOREACHBGENERATE DUMP1B=A 。pig会报错 Note:Youcannotusethetupledesignator(*)withtis,COUNT(*)willnotCOUNT(*)table_nameComputesthenumbero
27、felementsina1STOREOpig就会在当前 下新建一个“output” (该 必须事先不存在),并把结果文件放到该 下。请想像一下,如果要实现相同的功能,用 Java 或 C+写一个 Map-Reduce 应用程序需要多少时 正因为 pig 有如此优势,它才得到了广泛应用。 1234567 a1234.2 053.5 b799-1234567 a1234.2 053.5 b799- a7992.6 a1257.7 a1231.4gruntA=LOADa.txtAS(col1:chararray,12345,col5:double, gruntC=FOREACHBGENERATEgr
28、untDUMP 1234567gruntDUMP 12345rootlocalhostpig$a1234.2 a3053.5 b799- a7992.6 The COUNT function follows syntax sem s and ignores nulls. What this means is t a tuple he bag will not be counted if the field his tuple is NULL. If you want to include NULL values he count compu ion, use COUNT_STAR. 的数据结构
29、操作时,flatten到底是“弄平”了什么,又还是采用前面的 a.txt 数据文件来说明:gruntB=A rootlocalhostpig$ 67a1257.7 a1231.467a1257.7 a1231.4gruntA=LOADa.txtAS(col1:chararray,12345678,col5:double, gruntC=FOREACHBGENERATEgroup,AVG(A.col5),grunt DUMP C; gruntA=LOADa.txtAS(col1:chararray,123,col5:double, gruntB=GROUPABY(col2,col3,4grunt
30、DUMP 5678 The FLATTEN operator looks like a UDF syntactically, but it is actually an operator t changes the structure of tuples and bags in a way t a UDF cannot. Flatten un-nests tuples aswellasbags.Theideais thesame,buttheoperationandresultis differentforeachtypeof Fortuples,flattensubstitutesthefi
31、eldsofatupleinplaceofthetuple.Forex le,considera s a tuple of the form(a, (b,c). The expres GENERATE $0, flatten($1), will cause t tuple toe (a, b, c).所以 就看到了上面的结果。在有的时候,不“解嵌套”的数据结构是不利于观察的,输出这样的数据可能不利于 数程序的处理(例如,pig 将数据输出到磁盘后, 还需要用其他程序做后续处理,而对一个元组,输了一个让 在某些情况下可以清楚、方便地分析数据的机会。 GROUP 操作符会生成什么样的数据。在这里,
32、需 得更理论grunt C = FOREACH B GENERATE FLATTEN(group), AVG(A.col5), gruntB=A(col2,col3, 1234567 a1234.2 a3053.5 b799- a7992.6 a121234567 a1234.2 a3053.5 b799- a7992.6 a1257.7 a1231.4A=LOADa.txtAS(col1:chararray,1那么得到的A的数据结构为gruntDESCRIBE 1A:col1: ,col3: ,col5:2如果你要把A当作一个元组(tuple)来加载A=LOADa.txtAS(T:tuple
33、(col1:chararray,1,col5:double,gruntDESCRIBE 12A:T:(col1: double,col6:1234567gruntDUMP (tuplerootlocalhostpig$(tuple(relation(tuple组包含两个字段:(1)第一个字段被命名为“group”这一点非常容易与 GROUP 关键 (bag1234567 (b,7,9,9,-,- gruntA=LOADb.txt1234567 (b,7,9,9,-,- gruntA=LOADb.txtAS(T:tuple(col1:chararray,12345678,col5:double,
34、gruntDUMPA; 1234567a1234.29.8 a3053.52.1 b799- a7992.66.2 a1257.75.9 a1231.40.2gruntA=LOADc.txtAS(col1:chararray,123,col5:double,col6:double,gruntB=GROUPABY(col2,col3, 4gruntDUMP 5678 gruntC=FOREACHBD=DISTINCTA.col7;GENERATEgroup,问题:如何计算在第 2、3、4 列的所有维度组合下,最后一列不重复的 (123(tuple以数据文件 c.txt 为例:rootlocalh
35、ostpig$12345gruntDUMP 1234 1598 = 3412345gruntDUMP 1234 1598 = 34 863 62 06=gruntA=LOADb.txtAS,123456col4:chararray, gruntB=STREAMATHROUGH grunt DUMP B; if($4=) 用于去重的DISTINCTRemovesduplicatetuplesina 每一个包中含有若干元组(tuple)A,因此,FOREACH 后面的大括号里的操作,其实是对所谓的“ 包”(innerbag)的操作( FOREACH的说明),在这里, 指定了对 Acol7 这一列进
36、行去重,去重的结果被命名为D,然后再对D 计数(COUNT,就得到了输出结果数据,与前文所述的差不的目的。从总体上说,刚接触 pigCOUNT 函数来计算COUNT之后, 得到的还是一个关系(relation,而不是一个标量的数字,如何把一个关系转换为标具体请看这个 pig 中如何使用pig中可以嵌套使用s在某一步 pig 处理后,得到了类似于下面 b.txt 中的数据:加载数据,这个没什么好说的语句,用该语句对的每一行数据进行处理。此处的 s 输出 B,可见结果正确 1STOREO加载数据,这个没什么好说的语句,用该语句对的每一行数据进行处理。此处的 s 输出 B,可见结果正确 1STORE
37、O 的1pig-paramrootlocalhostpig$uidk 12 hfd132 bbN463 UFD13 908uidk 345hfd 28790re 12gruntA=LOADa.txtAS(acol1:chararray, gruntB=LOADb.txtAS,bcol2:chararray, g中 3456789 gruntDUMP 1234然后重新加载/etc/profile 文件1source(16)/3456789 gruntDUMP 1234然后重新加载/etc/profile 文件1source(16)/PigalsohostsaUDFhaveitorycalledt
38、allowsuserstosharet 你可能会想在 UDF下的数据:/abc/2010 /abc/2011(bag根据前面的keyA中的数据包,第三项是根据前面的keyB 个空的包“”,“re”这个key在B 中找到了对应的数据00000,(15)pigpig命令时提示“Cannotfindhadoopconfigurationsinclasspath”等错ERROR .apach g.MainERROR4010:Cannotfindhadoopconfigurationsinclasspath (neither hadoop-site.xml nor core-site.xml was f
39、ound he classpath).If you plan to use local mode, please put -x local option ind line显而易见,提示找不到与 hadoop 相关的配置文件。所以需要把 hadoop 安装添加到系统环境变量 PATH 中:/etc/profile gruntC=COGROUPAacol1,B1A=LOADgg(21)pig运行不起来,提示ntRetryingconnecttoga.txt 123412 1 6911A=LOADgg(21)pig运行不起来,提示ntRetryingconnecttoga.txt 123412 1
40、69123A=LOADa.txtAS,B=GROUPABY(col1,DUMP1234 12345rootlocalhost# 9861231 2 93 12345ASB=, (col1, C=GROUPB D=FOREACHCGENERATECOUNT(B);DUMP D;gruntDESCRIBE 1B:group:),A:12345ASB=, (col1, C=GROUPB D=FOREACHCGENERATECOUNT(B);DUMP D;gruntDESCRIBE 1B:group:),A:2把BDUMP出来,得到123 gruntDESCRIBE 12C:group:chararr
41、ay,B:group: ),A: cannotbecast 这个问题其实很傻,或许不用说你也知道了:假设有 a3 和 b2两个数,在大多数编程语言里,a/b 得到的1,想得到正确结果1.5 的话,需要转float 再计算。Pig 中其实(bag名字是 B,这个包中有 N 个元素,每一个元素都对应到中所说的一行。根据的分析,就是要统计B 中元素的个数,因此,这里当然就是COUNT(B) Computesthenumberofelementsina要做的就是统计这样的数据一共有多少行,也就得到了第 1、2 列的组合有多少组。第三和第四行代码,就实现了统计数据行数的功能。参考本文前面部分的“怎样统计
42、数据行数是对CFOREACH,所以要先看看 C 的数据结构:第一行代码加载数据,没什么好说 AA =123rootlocalhost#3 4在Pig中12345gruntA=,gruntB=FOREACHAGENERATEgruntDUMPB; 1123rootlocalhost#3 4在Pig中12345gruntA=,gruntB=FOREACHAGENERATEgruntDUMPB; 12345gruntB=FOREACHAGENERATE gruntDUMPB; /12345gruntB=FOREACHAGENERATEgruntDUMPB; 12345gruntB=FOREACHAG
43、ENERATEgruntDUMPB; 12345678rootlocalhost#cat 0 1 0 rootlocalhost#cat 1 0gruntA=, gruntA=, gruntA=, 123456A=LOAD1.txtAS , B=LOAD2.txtAS , C=UNIONA, E=FOREACHDGENERATEFLATTEN(group), DUMP123456A=LOAD1.txtAS , B=LOAD2.txtAS , C=UNIONA, E=FOREACHDGENERATEFLATTEN(group), DUMP12 /12gruntDESCRIBE C: 123456
44、gruntDUMP 12gruntDESCRIBE D: ,C: 123gruntDUMP g.tools.grunt.GruntERROR2042:Errorinnewlogicalplan. Try -Dpig.usenewlogicalplan=false.”的可能原因其他原因。我遇到并解决了一例。具体的代码不便在此陈列,但是基本可以说是由于自己写 D=C 3+8+9=20 12345 123A=LOADa.txtAS ,col2: B=FILTERAcol212345 123A=LOADa.txtAS ,col2: B=FILTERAcol2matchesDUMP1B=FILTERAB
45、Y(colmatches12 12345rootlocalhost#2010-05-06 2008-06-18 2011-10-11 2010-12-23 可以用内置函数 SUBSTRING 来实现:ReturnsasubstringfromagivenSUBSTRING(string,startIndex,看到,matchescol2 Java格式的正则表达式匹配表示任意字符,*表示字符出现任意次数;这个字符; rootlocalhost#62011-01-05 1234A62011-01-05 1234A=LOADa.txtAS(dateStr:chararray,flag:B=FOREA
46、CHAGENERATESUBSTRING(dateStr,0,C=DUMP 123 12345rootlocalhost#cat abc cde fgh789 ijk123B=FOREACHAGENERATECONCAT(col1,DUMP1234 123rootlocalhost#cat 5 7 ERROR .apach g.tools.grunt.Grunt ERROR 1045: Could not infer the matching function for .apach g.builtin.CONCAT as multiple or none of them fit. Please
47、 use an explic .所以在后面CONCAT的时候,对第二列进行了类型转换。A=(col1:chararray, 是要截取的字符串,第二个参数是起始索引(从0开始),第三个参数是结束索引。458 012B=FOREACHAGENERATECONCAT(col1,12345rootlocalhost#cat 以及123458 012B=FOREACHAGENERATECONCAT(col1,12345rootlocalhost#cat 以及1234rootlocalhost#cat 123456A= LOAD1.txtAS(a: B=LOAD2.txtAS C=JOINABYa,BBY
48、 D=GROUPC E=FOREACHDGENERATECOUNT(C);DUMP E;1C: C的数据为ERROR .apach g.tools.grunt.Grunt ERROR 1045: Could not infer the matching function for .apach g.builtin.CONCAT as multiple or none of them fit. Please use an explic .有人可能会问:要拼接几个字符串的话怎么办?CONCAT CONCAT 就要可以了(有点笨,但管用): CONCAT(a, CONCAT(b, c)(30)& 不同
49、的数据类型JOIN会失败A=(col1: , col2: 12 123 所以如果你要去除重复的,还需要用DISTINCE对C处理一下1234567A=LOAD1.txtAS B=LOAD2.txtAS C=JOINA12 123 所以如果你要去除重复的,还需要用DISTINCE对C处理一下1234567A=LOAD1.txtAS B=LOAD2.txtAS C=JOINABYa,BBY E=FOREACHDGENERATE DUMP/ 123456A=LOAD1.txtAS B=LOAD2.txtAS(b:C=JOINABYa,BBYb; D = GROUPC ALL; E=FOREACHDG
50、ENERATE DUMP1234rootlocalhost#58 43 123, B=FOREACHAGENERATEcol1,(col2isnull)?-1:col2),DUMPA=g.tools.grunt.Grunt ERROR 1107: Cannot merge join keys, patible types和chararrayuniq_C= D=uniq_C 123 (6,- (col2 is null)? -1 : col2) 的含义不用解释你也知道,就是当col2null的时候将其置为-1,否 isis ine1,columnWas expecting one of (后面省
51、略123 (6,- (col2 is null)? -1 : col2) 的含义不用解释你也知道,就是当col2null的时候将其置为-1,否 isis ine1,columnWas expecting one of (后面省略123456rootlocalhost#cat 1 8 5 12345A=,B=FOREACHAGENERATEa, D=FOREACHCGENERATEgroup,DUMP1234 注意到,(5,9) 1.txt 2、42行数据有 (6,) 1.txt SUM(B.x) B.x nullnullC=B 1D=FOREACHCGENERATEgroup,(IsEmpty
52、(B.x)?0:1234 1null)?0:D=FOREACH1D=FOREACHCGENERATEgroup,(IsEmpty(B.x)?0:1234 1null)?0:D=FOREACHCGENERATEgroup,(B.x123D=FOREACHCGENERATEgroup,SUM(B.x)AS E=FOREACHDGENERATEgroup,(sisnull)?-1:DUMP1234 (6,- 此,它会产生 reduce 过程。同时,在 map 阶段,它也会利用 combiner 来先去除一部分重Pigjob的优先级设为1setjob.priority(35)“Scalarscanbe
53、onlyusedwithprojections”么情况?按照 group6时,它应该是一个非空的包(bagnull的 123456789 d c5e12345678A=123456789 d c5e12345678A=LOADC=FOREACHB GENERATEgroup,COUNT(D), DUMP12345 那么,如果我在上面的代码中,把“D = FILTER A BY col2 = 3”不col2 = 3”,就肯定会得到“Scalars can be only used with projections”的错误提示。嵌套的的嵌套的(nested)FOREACH 和 的(inner)FO
54、REACH 是一个意思,正如你在本文第(35)FOREACH GENERATE得到想要的结果,这就是嵌套的/ 的 FOREACH。错误“Couldnotinferthematchingfunction一如果你遇到这个错误,那么有可能是你在多级 D=FILTERAcol2= E=FILTERAcol2= B=Arootlocalhost$12345A ,col2: B=FILTER ABYcol2=C=GROUPB D=FOREACH12345A ,col2: B=FILTER ABYcol2=C=GROUPB D=FOREACHCGENERATE DUMP1A=LOAD1.txtAS 1234
55、5rootlocalhost#cat 3 v4对第一列这样A=(col: Ctrl+A Ctrl+E HOME END进行 ERROR 1039: In alias B,patible types in EqualTo Operator lefnd side:long right hand side:chararray 在 grunt 模式下,如果你写了一句超长的 Pig 代码,那么,你想通过 HOME/END 键跳到行首和HOME时,Pig会在你的光标处 一个奇怪的。我遇这个错误的时候,是由于CONCAT 太多,自己多写了一个都没有发现。希望用Pig加载HBase数据时遇到的错误“ERROR
56、2999:ernalerror.not instantiate com.elephantbird.pig.load.HBaseLoader wi一 请看这个g 中文错误“ERROR 1039: In alias patible types in EqualTo Operator nd”这说明,前面可能有一个类型为long的字段,后面你却把它当chararray来用了,例如:gruntA=gruntB=LOAD gruntC=1.txtAS ,col2: 1.txtAS ,col2: ABYcol1,BgruntDESCRIBE 05C: gruntA=gruntB=LOAD gruntC=1.
57、txtAS ,col2: 1.txtAS ,col2: ABYcol1,BgruntDESCRIBE 05C: ,A:col2: gruntDUMPC; ,B:col2: 12345rootlocalhost#cat 3 v 4 n以及12345rootlocalhost#cat 9 2e30gruntA=LOAD1.txtgruntB=LOAD2.txtAS ,col2:gruntC=JOINABYcol1LEFTOUTER,BBY gruntDESCRIBE ,A:col2: ,B:col2: C: (col1: ,col2:C 的 schemaA JOIN 初次使用 JOIN 时,一般人
58、使用的都是所谓的“1A=(col1: ,col2: B=A ADUMPB g.tools.grunt.GruntERROR1108:Duplicateschemaalias:A:col1in gruntDUMP /RIGHTOUTERJOIN的功能LEFT RIGHT1234 2.txt ,肉眼一看就知道,142.txt gruntDUMP /RIGHTOUTERJOIN的功能LEFT RIGHT1234 2.txt ,肉眼一看就知道,142.txt 121 4gruntA=gruntB=LOAD gruntC=1.txtAS ,col2: 2.txtAS ,col2: ABYcol1LEFT
59、OUTER,BgruntDESCRIBE05C: ,A:col2: ,B:col2: gruntE= FOREACHDGENERATEA:col1gruntDUMPE; col1,A:col2AS 123456A=LOAD1.txtAS(col1: B=(col1: C=JOINABYcol1LEFTOUTER,BBYD=FILTERCBY(B:col1is E=FOREACHDGENERATEA:col1DUMPgruntD=FILTERC(B:col1 g12345678rootlocalhost#cat 41234A=LOAD C=FOREACHBGENERATEg12345678roo
60、tlocalhost#cat 41234A=LOAD C=FOREACHBGENERATEgroup,DUMP1 1234A=LOADcol2: C=FOREACHBGENERATE DUMP1234A = LOAD3.txt , C=FOREACHBGENERATEgroup,DUMP1234 B=A(col1, ,B=A ,B=A 12345市1a市2b市3c市4f5文件test.pig 内容为1A=LOAD2xtAS ,col2:chararray,col3:(col2市 B=FILTERA1pig-xlocal12345市1a市2b市3c市4f5文件test.pig 内容为1A=LOA
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 店铺转让合同标准版可打印
- 船舶交易中的运输保险2024年度合同
- 2024年度房产项目工程验收合同
- 二零二四年电子科技有限公司与代工厂生产制造合同
- 2024年度广告发布合同:某品牌广告在某媒体上的投放细节3篇
- 2024年度房屋买卖合同协议书(含长期维修保障)3篇
- 2024版房屋及商业空间转让合同3篇
- 彩票销售及管理系统技术服务合同
- 二零二四年度园林景观改造合同
- 二零二四年度环保设备采购与施工合同
- 公路常用评定公式
- 隧道初支、衬砌背后脱空处理修改
- 基本养老保险缴费补填申请表-附表
- 半导体专业实验补充silvaco器件仿真
- 反击式破碎机说明书
- 共青团中山市12355青少年综合服务平台建设方案
- 第五章中国的地理差异
- 项目安全管理工作流程图
- 浅谈钢管混凝土结构
- 中国压力容器标准与美国ASME规范的比较(DOC 8页)
- 季度工作总结与计划表excel模板
评论
0/150
提交评论