




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、PIG學(xué)習(xí)記錄PIG是什么?Pig提供了一個(gè)基于Hadoop的并行地執(zhí)行數(shù)據(jù)流處理的引擎。Pig運(yùn)行于Hadoop之上,它同時(shí)使用到Hadoop分布式文件系統(tǒng)HDFS和Hadoop處理系統(tǒng)MapReduce。數(shù)據(jù)類型基本數(shù)據(jù)類型:l int:整型,4字節(jié)l long:長(zhǎng)整型,8字節(jié)l float:?jiǎn)尉雀↑c(diǎn)型,4字節(jié)l double:雙精度浮點(diǎn)型,8字節(jié)l chararray:字符串l bytearray:字節(jié)串復(fù)雜數(shù)據(jù)類型:l Map:map是一種chararray和數(shù)據(jù)元素之間的鍵值對(duì)映射,其中數(shù)據(jù)元素可以是任意的pig類型,包括復(fù)雜類型。通常使用方括號(hào)劃定map結(jié)構(gòu)name# bob,
2、age#55l Tuple:tuple是一個(gè)定長(zhǎng)的,包含有序pig數(shù)據(jù)元素的集合,一個(gè)tuple相當(dāng)于SQL中的一行,而tuple字段相當(dāng)于SQL中的列。Tuple常量使用圓括號(hào)來(lái)指示tuple結(jié)構(gòu),使用逗號(hào)劃分字段(bob,55)l Bag:bag是一種無(wú)序的tuple集合。Bag常量通過(guò)花括號(hào)進(jìn)行劃分(bob,55),(sally,52),(john,25)NULL:表示這個(gè)值是未知的模式:加載數(shù)據(jù)時(shí)顯示聲明模式:dividends = load NYSE_dividends as (exchange:chararray,symbol:chararray,date:chararray,di
3、vidend:float);使用加載函數(shù)定義模式:mdata = load mydata using HCatLoader();猜測(cè)模式:calcs = foreach daily generate $7/1000,$3*100.0,SUBSTRING($0,0,1),$6-$3;根據(jù)運(yùn)算符兩端數(shù)據(jù)類型和函數(shù)參數(shù)的數(shù)據(jù)類型猜測(cè)出模式不明的變量的模式數(shù)據(jù)類型語(yǔ)法舉例intintas(a:int)longlongas(a:long)floatfloatas(a:float)doubledoubleas(a:double)chararraychararrayas(a:chararray)bytear
4、raybytearrayas(a:bytearray)mapmap或者maptype,其中type必須是一個(gè)合法的數(shù)據(jù)類型。這就聲明了map中所有的值都是這個(gè)數(shù)據(jù)類型的as(a:map,b:mapint)tupletuple()或者tuple(list_of_fields),其中l(wèi)ist_of_fields是一組通過(guò)逗號(hào)分隔的字段聲明as(a:tuple(),b:tuple(x:int,y:int)bagbag或者bagt:list_of_fields),其中l(wèi)ist_of_fields是一組通過(guò)逗號(hào)分隔的字段聲明。需要注意的是,bag中的tuple必須要有一個(gè)名稱,這里指定的名稱為t,雖然用
5、戶可能永遠(yuǎn)無(wú)法直接訪問(wèn)t這個(gè)tuple(a:bag,b:bagt:(x:int,y:int)類型轉(zhuǎn)換intlongfloatdoublechararrayint可以可以可以可以long可以但會(huì)被截?cái)嗫梢钥梢钥梢詅loat可以但會(huì)被截?cái)嗫梢缘珪?huì)被截?cái)嗫梢钥梢詃ouble可以但會(huì)被截?cái)嗫梢缘珪?huì)被截?cái)嗫梢缘珪?huì)被截?cái)嗫梢詂hararray可以但非數(shù)值字符會(huì)轉(zhuǎn)換為null可以但非數(shù)值字符會(huì)轉(zhuǎn)換為null可以但非數(shù)值字符會(huì)轉(zhuǎn)換為null可以但非數(shù)值字符會(huì)轉(zhuǎn)換為null顯式轉(zhuǎn)換:unitended = foreach player generate (int)goal;隱式轉(zhuǎn)換:rough = foreac
6、h daily generate volume*close;(其中volume為int,close為float,會(huì)將volume轉(zhuǎn)換為float)加載直接加載文件:divs = load /data/examples/NYSE_dividends;通過(guò)加載函數(shù)加載:divs = load NYSE_dividends using HBaseStorage();默認(rèn)加載函數(shù):divs = load NYSE_dividends using PigStorage(,);存儲(chǔ)直接存儲(chǔ)文件:store processed into /data/examples/processed;通過(guò)加載函數(shù)加載:s
7、tore processed into processed using HBaseStorage();默認(rèn)加載函數(shù):store processed into processed using PigStorage(,);輸出:dump processed;關(guān)系操作:foreach:接受一組表達(dá)式,然后在數(shù)據(jù)管道中將它們應(yīng)用到每條記錄中B = foreach A generate user,id;gain = foreach prices generate $6-$3;beginning = foreach prices generate open.close;與group by語(yǔ)句結(jié)合進(jìn)行統(tǒng)計(jì)B
8、 = group A1 by x;C = foreach B generate SUM(A1.yz);使用用戶自定義函數(shù)(UDF)Upped = foreach divs generate UPPER(symbol) as symbol,dividends;describe:顯示字段模式describe sym;filter:過(guò)濾流記錄項(xiàng)startswithcm = filter divs by symbol matches CM.*;startswithcm = filter divs by not symbol matches CM.*;*x = null會(huì)返回nullgroup:可以把具
9、有相同鍵值的數(shù)據(jù)聚合在一起進(jìn)行分組grpd = group daily by stock;cnt = foreach grpd generate group,COUNT(daily);grpd = group daily all;-對(duì)所有字段進(jìn)行分組cnt = foreach grpd generate COUNT(daily);order by:對(duì)用戶的數(shù)據(jù)進(jìn)行排序,產(chǎn)生一個(gè)全排序的輸出結(jié)果bydate = order daily by date;bydatensymbol = order daily by date,symbol;使用desc進(jìn)行降序排序Byclose = order da
10、ily by close desc,open;-open還是升序排序distinct:去除重復(fù)值uniq = distinct daily;join:根據(jù)鍵值聯(lián)合數(shù)據(jù),沒(méi)有被匹配到的數(shù)據(jù)會(huì)被去掉jnd = join daily by symbol,divs by symbol;jnd = join daily by (symbol,date),divs by (symbol,date);outer join:jnd = join daily by (symbol,date) left outer,divs by (symbol,date);jnd = join daily by (symbol
11、,date) right,divs by (symbol,date);jnd = join daily by (symbol,date) full,divs by (symbol,date);*自聯(lián)需要加載同一數(shù)據(jù)兩次Limit:從結(jié)果中拿出幾條數(shù)據(jù),會(huì)額外產(chǎn)生一個(gè)reduce過(guò)程first10 = limit divs 10;Sample:抽取樣本數(shù)據(jù),返回一定百分比的行數(shù)的數(shù)據(jù),通過(guò)一個(gè)0到1的double指定some = sample divs 0.1Parallel:附加到任一個(gè)關(guān)系操作符后面控制reduce階段的并行,可以觸發(fā)reduce的操作符有g(shù)roup、order、distin
12、ct、join、cogroup和crossbysymbl = group daily by symbol parallel 10;*通過(guò)set default_parallel設(shè)置腳本范圍有效的并行數(shù)注冊(cè)UDF:register your_path_to_piggybank/piggybank,jar;把函數(shù)所在的jar包導(dǎo)入進(jìn)來(lái)register production.py using jython as bballudfs;注冊(cè)Python函數(shù),Python腳本必須在用戶當(dāng)前目錄下define:可用于為用戶的java UDF定義一個(gè)別名define reverse org.apache.pi
13、g.piggybank.evaluation.string.Reverse();define convert com.acme.financial.CurrencyConverter(dollar,euro);調(diào)用靜態(tài)Java函數(shù)InvokeForInt、InvokeForLong、InvokeForFloat、InvokeForDouble和InvokeForString對(duì)應(yīng)相應(yīng)的返回值的函數(shù),第1個(gè)參數(shù)是完整的包名、類名和方法名,第2個(gè)參數(shù)是一個(gè)以空格作為分割符的參數(shù)列表,如果這個(gè)參數(shù)是個(gè)數(shù)組,會(huì)跟在這個(gè)類型名稱后面,如果不需要參數(shù)則省略第2個(gè)參數(shù)define hex InvokeForS
14、tring(java.lang.Integer.toHexString, int);inhex = foreach nonnull generate symbol,hex(int)volume);define stdev InvokeForDouble(com.acme.Stats.stdev, double);A = load input as (id:int,dp:double);B = group A by id;C = foreach B generate group,stdev(A.dp);Pig Latin的高級(jí)應(yīng)用高級(jí)關(guān)系操作foreach結(jié)合flatten進(jìn)行分組統(tǒng)計(jì)B = g
15、roup A by a,b,c;C = foreach B generateflatten(group:a) as a,flatten(group:b) as b,flatten(group:c) as c,COUNT(*) as num;計(jì)算出每一個(gè)分組的記錄數(shù)內(nèi)嵌foreachgrpd = group daily by exchange;uniqcnt = foreach grpgsym = daily.symbol;uniq_sym = distinct sym;generate group,COUNT(uniq_sym);*sym = daily.symbol 相等于sym = for
16、each grpd generate daily.symbol理論上任何一個(gè)Pig Latin關(guān)系操作符在foreach語(yǔ)句內(nèi)都是合法的,但是目前只支持distinct、filter、limit和order該功能可用于從一組記錄中找出前k個(gè)元素grpd = group divs by symbol;top3 = foreach grpdsorted = order divs by dividends desc;top = limit sorted 3;generate group,flatten(top);使用不同的join實(shí)現(xiàn)方法當(dāng)進(jìn)行Join時(shí),最后一個(gè)表不會(huì)放入內(nèi)存,而是以stream的
17、方式進(jìn)行處理,所以最好把最大的一個(gè)表放置到Join語(yǔ)句的最后。 Pig實(shí)現(xiàn)了以下三種定制的Join以進(jìn)一步優(yōu)化。 1) Replicated Join(分片-冗余join) 當(dāng)進(jìn)行Join的一個(gè)表比較大,而其他的表都很小(能夠放入內(nèi)存)時(shí),Replicated Join會(huì)非常高效。Replicated Join會(huì)把所有的小表放置在內(nèi)存當(dāng)中,然后在Map中讀取大表中的數(shù)據(jù)記錄,和內(nèi)存中存儲(chǔ)的小表的數(shù)據(jù)進(jìn)行Join,得到Join結(jié)果,無(wú)需Reduce??梢栽贘oin時(shí)使用 Using 'replicated'語(yǔ)句來(lái)觸發(fā)Replicated Join,大表放置在最左端,其余小表(可以
18、有多個(gè))放置在右端。jnd = join daily by (exchange,symbol),divs by (exchange,symbol) using replicated;*第2個(gè)輸入即divs會(huì)被加載到內(nèi)存中 2) Skewed Join 當(dāng)進(jìn)行Join的兩個(gè)表中,一個(gè)表數(shù)據(jù)記錄針對(duì)key的分布極其不均衡的時(shí)候,簡(jiǎn)單的使用Hash來(lái)分配Reduce端的key時(shí),可能導(dǎo)致某些Reducer上的數(shù)據(jù)量特別大,降低整個(gè)集群的性能。Skewed Join可以首先對(duì)左邊的表的key統(tǒng)計(jì)其分布,然后決定Reduce端的key的分布,盡量使得Reduce端的數(shù)據(jù)分布比較均衡??梢栽贘oin時(shí)使用
19、Using 'skewed'語(yǔ)句來(lái)觸發(fā)Skewed Join,需要進(jìn)行統(tǒng)計(jì)的表(亦即key可能分布不均衡的表)放置在左端。jnd = join cinfo by city,users by city using skewed;*join連接的第2個(gè)輸入將會(huì)被進(jìn)行樣本抽樣并且會(huì)將對(duì)應(yīng)的記錄的條數(shù)非常大的鍵分拆到各個(gè)reducer中。第1個(gè)輸入會(huì)對(duì)包含這些值的進(jìn)行冗余復(fù)制然后分發(fā)到各個(gè)reducer中。 3) Merge Join 當(dāng)進(jìn)行Join的兩個(gè)表都已經(jīng)是有序的時(shí),可以使用Merge Join。Join時(shí),首先對(duì)右端的表進(jìn)行一次采樣,對(duì)采樣的數(shù)據(jù)創(chuàng)建索引,記錄(key, 文件
20、名, 偏移offset)。然后進(jìn)行map,讀取Join左邊的表,對(duì)于每一條數(shù)據(jù)記錄,根據(jù)前一步計(jì)算好的索引來(lái)查找數(shù)據(jù),進(jìn)行Join??梢栽贘oin時(shí)使用Using 'merge'語(yǔ)句來(lái)觸發(fā)Merge Join,需要?jiǎng)?chuàng)建索引的表放置在右端。jnd = join daily by symbol,divs by symbol using merge;*對(duì)于原本無(wú)序的表而言,由于要先對(duì)表進(jìn)行排序,所以總體效率并不比普通的join高多少另外,在進(jìn)行Join之前,首先過(guò)濾掉key為Null的數(shù)據(jù)記錄可以減少Join的數(shù)據(jù)量。Cogroup:是group的一般化方式,不是基于一個(gè)鍵收集一個(gè)輸
21、入的記錄,而是基于一個(gè)鍵收集多個(gè)輸入的記錄。C = cogroup A by id,B by id;C:group:int,A:id:int,val:float,B:id:int,val2:intcogroup可以用于進(jìn)行一個(gè)semi-join的操作grpd = cogroup daily by (exchange,symbol),divs by (exchange,symbol);sjnd = filter grpd by not IsEmpty(divs);final = foreach sjnd generate flatten(daily);*semi_join就是當(dāng)?shù)?個(gè)表的鍵在第2
22、個(gè)表中匹配成功時(shí)則返回第1個(gè)表的記錄,以上操作的原理是先使用要進(jìn)行join的鍵對(duì)兩個(gè)表進(jìn)行收集分組并判斷出分組中第2個(gè)表的數(shù)據(jù)不為空的分組,最后對(duì)第1個(gè)表的數(shù)據(jù)進(jìn)行解包。Union:將兩個(gè)表合并到一起C = union A,B;Pig中的union并不要求兩個(gè)表具有相同的模式,如果兩個(gè)表的字段類型可以通過(guò)隱式轉(zhuǎn)換則union之后的表的字段類型將會(huì)是轉(zhuǎn)換后的類型,如果無(wú)法進(jìn)行隱式轉(zhuǎn)換1則結(jié)果表將會(huì)是沒(méi)有模式的如果不希望結(jié)果表沒(méi)有模式可以使用onschemaC = union onschema A,B;在讀取數(shù)據(jù)的過(guò)程中,如果給定的輸入中沒(méi)有相關(guān)的字段,那么值用null填補(bǔ)Cross:第1個(gè)表的每
23、條記錄都會(huì)與第2個(gè)表的每條記錄結(jié)合tonsodata = cross daily,divs parallel 10;*cross常常會(huì)產(chǎn)生大量的數(shù)據(jù)。如果給定的輸入時(shí)n和m條記錄,那么cross的輸出會(huì)產(chǎn)生n*m條記錄cross可以用來(lái)進(jìn)行非等值join(theta join)crossed = cross daily,divs;tjnd = filter crossed by daily:date < divs:date;*上述操作結(jié)果為daily中每條記錄都和divs表中所有date更大的記錄進(jìn)行連接在Pig中集成遺留代碼和MapReduce程序stream:在流中使用其他程序處理數(shù)
24、據(jù)define hd highdiv.pl ship(highdiv.pl);highdivs = stream divs through hd as (exchange,symbol,date,dividends);*stream命令中的as語(yǔ)句是非必須的,但是如果沒(méi)有提供as語(yǔ)句那么結(jié)果將沒(méi)有模式。所使用的可執(zhí)行文件在每個(gè)map任務(wù)或者reduce任務(wù)中都會(huì)被調(diào)用一次,不會(huì)對(duì)于每條記錄都調(diào)用一次。Pig實(shí)例化這個(gè)可執(zhí)行文件然后保證數(shù)據(jù)持續(xù)輸入是通過(guò)標(biāo)準(zhǔn)輸入stdin實(shí)現(xiàn)的。同時(shí)也會(huì)持續(xù)檢查標(biāo)準(zhǔn)輸出stdout,將所得的任意結(jié)果傳送給數(shù)據(jù)流中的下一個(gè)操作符。這個(gè)可執(zhí)行文件可以選擇是否對(duì)每個(gè)輸
25、入產(chǎn)生一個(gè)輸出,或者沒(méi)一定數(shù)量的輸入產(chǎn)生一個(gè)輸出,或者只有當(dāng)所有的輸入都被接收后才會(huì)產(chǎn)生一個(gè)輸出以上操作中定義將使用的可執(zhí)行文件highdiv.pl的別名為hp并通過(guò)ship命令加載highdiv.pl到Hadoop中作為任務(wù)的一部分define blc blacklistchecker.py cache(/data/shared/badurls#badurls);goodurls = stream normalized through blc as (url,pageid);*cache使用Hadoop的分布式緩存,#號(hào)前面的部分是HDFS上的路徑,#后面的字符串是可執(zhí)行文件將讀取的文件別名
26、,Hadoop將會(huì)把/data/shared/badurls復(fù)制到各個(gè)task機(jī)器的工作目錄下啊并命名為badurls mapreduce:可以在數(shù)據(jù)流中直接添加MapReduce任務(wù)goodurls = mapreduce blacklistchecker.jarstore normalized into inputload output as (url,pageid)com.acmeweb.security.BlackListChecker I input o output;*mapreduce命令的第1個(gè)參數(shù)是包含MapReduce任務(wù)的JAR文件,store定義了數(shù)據(jù)如何流入到MapR
27、educe中的,load獲取MapReduce中的輸出,需要指定模式,第3個(gè)參數(shù)是可選的,用于傳遞給Java命令的參數(shù)split:顯式地對(duì)數(shù)據(jù)流進(jìn)行劃分split wlogs into apr03 if timestamp < 20110404,apr02 if timestamp < 20110403 and timestamp > 20110401,apr01 if timestamp < 20110402 and timestarmp > 20110331;store apr03 into 20110403;store apr02 into 20110402
28、;store apr01 into 20110401;*相當(dāng)于使用多個(gè)filter對(duì)數(shù)據(jù)流進(jìn)行篩選,實(shí)際上pig會(huì)將其重寫為這樣執(zhí)行過(guò)程控制set:用于設(shè)置pig執(zhí)行MapReduce任務(wù)的環(huán)境變量Pig提供的set參數(shù)參數(shù)值數(shù)據(jù)類型描述debugstring設(shè)置日志級(jí)別是DEBUG。與在命令行指定-debug DEBUG效果是一樣的default_parallelinteger為腳本中所有的reduce操作設(shè)置一個(gè)缺省的并發(fā)級(jí)別。string為Hadoop任務(wù)分配一個(gè)名稱。默認(rèn)情況下這個(gè)名稱和所執(zhí)行的腳本的文件名是一樣的,或者是一個(gè)為交互式進(jìn)程隨機(jī)生成的名稱job.prior
29、itystring如果Hadoop集群是使用能力調(diào)度器對(duì)隊(duì)列進(jìn)行優(yōu)先級(jí)控制,那么這個(gè)參數(shù)可以為Pig任務(wù)設(shè)置優(yōu)先級(jí)。提供的值有5個(gè):very_low、low、normal、high和very_highPig Latin預(yù)處理器參數(shù)傳入?yún)?shù)可以通過(guò)命令行傳入或者通過(guò)一個(gè)參數(shù)文件傳入yesterday = filter daily by date = $DATE;命令行需要傳入?yún)?shù)pig p DATE=2009-12-17 daily.pig也可以通過(guò)-m或者-param_file命令指定參數(shù)文件pig para_file daily.params daily.pig傳入文件內(nèi)的格式是“參數(shù)=值”
30、的形式Y(jié)EAR=2009-MONTH=12-DAY=17DATE=$YEAR$MONTH$DAY也可以在腳本內(nèi)使用%declare和%default標(biāo)記定義參數(shù)%default parallel_factor 10;grp = group wlogs by pageid parallel $parallel_factor;宏通過(guò)define語(yǔ)句定義:define dividend_analysis (daily,year,daily_symbol,daily_open,daily_close)returns analyzeddivs = load NYSE_dividends as (exch
31、ange:chararray,symbol:chararray,date:chararray,dividends:float);divsthisyear = filter divs by date matches $year-.*;dailythisyear = filter $daily by date matches $year-.*;jnd = join divsthisyear by symbol,dailythisyear by $daily_symbol;$analyzed = foreach jnd generate dailythisyear:$daily_symbol,$da
32、ily_close-$daily_open;daily = load NYSE_daily as (exchange:chararray,symbol:chararray,date:chararray,open:float,high:float,low:float,close:float,volume:int,adj_close:float);results = dividend_analysis(daily,2009,symbol,open,close);包含其他Pig Latin腳本Import命令用于將某個(gè)Pig Latin腳本加入另一個(gè)腳本中import ./examples/ch6/
33、dividend_analysis.pig;daily = load NYSE_daily as (exchange:chararray,symbol:chararray,date:chararray,open:float,high:float,low:float,close:float,volum:int,adj_close:float);results = dividend_analysis(daily,2009,symbol,open,close);開發(fā)與測(cè)試Pig Latin腳本在命令行使用-c或者-check選項(xiàng)對(duì)腳本進(jìn)行語(yǔ)法檢查而不會(huì)實(shí)際執(zhí)行,只會(huì)對(duì)腳本進(jìn)行解析和執(zhí)行語(yǔ)法檢查。使用
34、選項(xiàng)-dryruun也會(huì)檢查語(yǔ)法,然會(huì)展開宏命令和import部分,以及進(jìn)行參數(shù)替換。describe命令會(huì)顯示腳本中指定關(guān)系的模式describe trimmed;explain用于檢測(cè)Pig是如何處理不同腳本的。有兩種使用方法explain加上別名:explain trimmed;在Grunt交互界面使用命令行pig x local e explain script explain.pig如果要以圖形化方式展示出來(lái),需要在命令行中增加-dot out filename命令,這將會(huì)打印出一個(gè)文件,內(nèi)容是以DOT語(yǔ)言展示的用戶的腳本將會(huì)是如何執(zhí)行的。illustrate:會(huì)對(duì)用戶的數(shù)據(jù)進(jìn)行抽樣
35、并且對(duì)抽樣的數(shù)據(jù)執(zhí)行用戶的腳本,但是當(dāng)它遇到一些移除數(shù)據(jù)的操作符是,它會(huì)保證有一些數(shù)據(jù)可以通過(guò)這個(gè)操作符而有一些不可以。在腳本中使用:illustrate avgdiv;通過(guò)命令行使用:pig e illustrate script illustrate.pig編寫優(yōu)質(zhì)的腳本盡早地并經(jīng)常地進(jìn)行過(guò)濾,Pig的邏輯優(yōu)化器會(huì)盡可能第將過(guò)濾器前置Pig什么時(shí)候前推過(guò)過(guò)濾器cogroup有時(shí)進(jìn)行推測(cè)執(zhí)行如果只是用于cogroup的一個(gè)輸入而且不包含UDF,那么過(guò)濾器會(huì)被前推cross有時(shí)進(jìn)行推測(cè)執(zhí)行如果只是用于cross的一個(gè)輸入那么過(guò)濾器會(huì)被前推distinct會(huì)進(jìn)行推測(cè)執(zhí)行filter不會(huì)進(jìn)行推測(cè)執(zhí)
36、行會(huì)嘗試將過(guò)濾器合并并且避免數(shù)據(jù)傳遞通過(guò)第2個(gè)操作符。這僅當(dāng)所有的過(guò)濾器前推都完成時(shí)才會(huì)進(jìn)行foreach有時(shí)進(jìn)行推測(cè)執(zhí)行當(dāng)過(guò)濾器引用到的字段是之前存在的并且foreach后面也有,并且foreach并沒(méi)有改變這些字段的時(shí)候會(huì)進(jìn)行過(guò)濾器前推group有時(shí)進(jìn)行推測(cè)執(zhí)行如果不包含UDF那么過(guò)濾器會(huì)被前推join有時(shí)進(jìn)行推測(cè)執(zhí)行如果過(guò)濾器只用于join操作的一個(gè)輸入,而且如果對(duì)這個(gè)輸入進(jìn)行的不是外部連接,那么過(guò)濾器會(huì)被前推load不會(huì)進(jìn)行推測(cè)執(zhí)行mapreduce不會(huì)進(jìn)行推測(cè)執(zhí)行mapreduce對(duì)Pig是不透明的,因?yàn)樗鼰o(wú)法確定進(jìn)行推測(cè)執(zhí)行是否是安全的sort會(huì)進(jìn)行推測(cè)執(zhí)行split不會(huì)進(jìn)行推測(cè)執(zhí)
37、行store不會(huì)進(jìn)行推測(cè)執(zhí)行stream不會(huì)進(jìn)行推測(cè)執(zhí)行stream對(duì)Pig是不透明的,因?yàn)樗鼰o(wú)法確定進(jìn)行推測(cè)執(zhí)行是否是安全的union會(huì)進(jìn)行推測(cè)執(zhí)行盡早地并經(jīng)常地進(jìn)行映射當(dāng)Pig邏輯優(yōu)化器認(rèn)定某些字段不再使用的時(shí)候會(huì)強(qiáng)有力地移除這些字段,然而在某些情況下Pig的邏輯優(yōu)化器無(wú)法判斷某些字段是否不再使用,所有用戶最好是在foreach語(yǔ)句中盡早地移除不需要的字段。正確并合理使用join對(duì)于replicated join,小表必須是作為最后一個(gè)輸入給出的。對(duì)于skewed join,第2個(gè)輸入是用于對(duì)大的鍵抽樣的。對(duì)于默認(rèn)的join,最右邊的輸入整個(gè)記錄是直接流過(guò)的,反而其他的輸入對(duì)應(yīng)給定鍵對(duì)應(yīng)的
38、記錄是具體化到內(nèi)存中的。因此如果知道join的一個(gè)輸入中每個(gè)鍵對(duì)應(yīng)的記錄要比其他的多,那么應(yīng)當(dāng)把它放在join的最右邊的位置。對(duì)于merge join,左邊的輸入是作為MapReduce任務(wù)的輸入,因此開始的map任務(wù)個(gè)數(shù)取決于這個(gè)輸入。如果一個(gè)輸入比另一個(gè)輸入要大,那么應(yīng)該將輸入大的放置在join的左邊以此為任務(wù)獲得更多的map任務(wù),這也會(huì)降低為右邊的輸入建立索引的抽樣步驟的數(shù)據(jù)量。內(nèi)置UDF內(nèi)置加載函數(shù)和存儲(chǔ)函數(shù)加載函數(shù)函數(shù)名稱加載地址所表明的含義構(gòu)造函數(shù)參數(shù)描述HBaseStorageHbase表名第一個(gè)參數(shù)是描述列族的字符串和與Pig字段對(duì)應(yīng)的列,第2個(gè)參數(shù)選項(xiàng),字符串類型(可選)從H
39、base中加載數(shù)據(jù)PigStorage HDFS文件路徑第1個(gè)參數(shù)是字段間的分隔符(可選的,默認(rèn)為制表符)從HDFS中加載text文件數(shù)據(jù)TextLoaderHDFS文件路徑?jīng)]有參數(shù)按行讀取text文本文件,每一行作為一個(gè)有一個(gè)chararray類型字段的tuple存儲(chǔ)函數(shù)函數(shù)名稱加載地址所表明的含義構(gòu)造函數(shù)參數(shù)描述HBaseStorageHbase表名第1個(gè)參數(shù)是描述Pig字段對(duì)應(yīng)的Hbase列族和列的字符串存儲(chǔ)數(shù)據(jù)到Hbase中PigStorageHDFS文件路徑第1個(gè)參數(shù)是字段間的分隔符(可選的,默認(rèn)為制表符)存儲(chǔ)文本文件數(shù)據(jù)到HDFS中內(nèi)置求值函數(shù)和過(guò)濾函數(shù)內(nèi)置數(shù)學(xué)函數(shù)函數(shù)名稱參數(shù)返回
40、值起始版本double ABS(double input)input絕對(duì)值0.8double ACOS(double input)input反余弦0.8double ASIN(double input)input反正弦0.8double ATAN(double input)input反正切0.8double CBRT(double input)input立方根0.8double CEIL(double input)input向上取整計(jì)算,它返回的是大于或等于函數(shù)的參數(shù),并且與之最接近的整數(shù)0.8double COS(double input)input余弦0.8double COSH(doub
41、le input)input雙曲余弦0.8double EXP(double input)input以e為底的指數(shù)函數(shù),返回e(自然對(duì)數(shù)的底)的冪次方0.8double FLOOR(double input)input返回小于或等于指定表達(dá)式的最大整數(shù)0.8double LOG(double input)input自然對(duì)數(shù)0.8double LOG10(double input)input以10為底的對(duì)數(shù)函數(shù)0.8long ROUND(double input)input對(duì)輸入值進(jìn)行四舍五入取值0.8double SIN(double input)input正弦0.8double SINH(d
42、ouble input)input雙曲正弦0.8double SORT(double input)input平方根0.8double TAN(double input)input正切0.8double TANH(double input)input雙曲正切0.8內(nèi)置聚合函數(shù)內(nèi)置聚合函數(shù)函數(shù)名稱參數(shù)返回值起始版本int AVG(int) input)inputinput中的所有值的平均值,null值會(huì)被忽略0.2long AVG(int) input)inputinput中的所有值的平均值,null值會(huì)被忽略0.2long AVG(float) input)inputinput中的所有值的平均值
43、,null值會(huì)被忽略0.2double AVG(double) input)inputinput中的所有值的平均值,null值會(huì)被忽略0.2double AVG(bytearray) input)inputinput中的所有bytearray類型值的平均值,會(huì)被類型轉(zhuǎn)換為double型:null值會(huì)被忽略0.1long COUNT(與SQL中COUNT(字段)的作用相同)inputinput中的記錄的個(gè)數(shù),包括null值0.1long COUNT_STAR(與SQL中的COUNT(*)的作用相同)inputinput中的所有記錄的個(gè)數(shù),包括null值0.4int MAX(int) input)
44、inputinput中的最大值,null值會(huì)被忽略0.2long MAX(long) input)inputinput中的最大值,null值會(huì)被忽略0.2float MAX(float) input)inputinput中的最大值,null值會(huì)被忽略0.2double MAX(double) input)inputinput中的最大值,null值會(huì)被忽略0.2chararray MAXinputinput中的最大值,null值會(huì)被忽略0.2double MAX(bytearray) input)inputinput中所有bytearray類型中值的最大值,會(huì)被類型轉(zhuǎn)換為double型;null
45、值會(huì)被忽略0.1int MIN(int) input)inputinput中的最小值,null值會(huì)被忽略0.2long MIN(long) input)inputinput中的最小值,null值會(huì)被忽略0.2float MIN(float) input)inputinput中的最小值,null值會(huì)被忽略0.2double MIN(double) input)inputinput中的最小值,null值會(huì)被忽略0.2chararray MINinputinput中的最小值,null值會(huì)被忽略0.2double MIN(bytearray) input)inputinput中所有bytearray類
46、型中值的最小值,會(huì)被類型轉(zhuǎn)換為double型;null值會(huì)被忽略0.1long SUM(int) input)input數(shù)據(jù)包中所有值的和;null值會(huì)被忽略0.1long SUM(long) input)input數(shù)據(jù)包中所有值的和;null值會(huì)被忽略0.2double SUM(float) input)input數(shù)據(jù)包中所有值的和;null值會(huì)被忽略0.2double SUM(doubel) input)input數(shù)據(jù)包中所有值的和;null值會(huì)被忽略0.2double SUM(bytearray) input)input數(shù)據(jù)包中所有bytearray類型值的和,會(huì)被類型轉(zhuǎn)換為double
47、型;null值會(huì)被忽略0.1內(nèi)置chararray和bytearray處理UDF內(nèi)置chararray和bytearray處理UDF函數(shù)名稱參數(shù)返回值起始版本chararray CONCAT(chararray c1,chararray c2)c1 c2c1和c2連接0.1bytearray CONCAT(bytearray b1,bytearray b2)b1 b2b1和b2連接0.1int INDEXOF(chararray source,chararray search)source:被查找的字符串 search:要查找的字符串source字符串中第1個(gè)seach字符串所在的位置;如果字
48、符串中沒(méi)有要查找的字符串則返回-10.8int LAST_INDEX_OF(chararray source,chararray search)source:被查找的字符串 search:要查找的字符串source字符串中最后一個(gè)search字符串所在的位置;如果字符串中沒(méi)有要查找的字符串則返回-10.8chararray LCFIRST(chararray input)input第1個(gè)字符轉(zhuǎn)換為小寫0.8chararray LOWER(chararray input)input所有的輸入字符轉(zhuǎn)換為小寫0.8chararray REGEX_EXTRACT(chararray source,ch
49、ararray regex,int n)source:被查找的字符串 regex:使用的正則表達(dá)式 n:第n個(gè)匹配的部分,從0開始source中符合正則表達(dá)式的第n個(gè)部分;如果沒(méi)有匹配的部分則返回null0.8(chararray) REGEX_EXTRACT_ALL(chararray source,chararray regex)source:被查找的字符串 regex:使用的正則表達(dá)式source中符合正則表達(dá)式的所有部分放到tuple中;如果沒(méi)有匹配到的部分則返回null0.8chararray REPLACE(chararray source,chararray toReplace,chararray newValue)source:被查找的字符串 toReplace:將被替換的字符串 newValue:用于替換的新的字符串source中所有的toReplace字符串被替換為newValue字符串0.8long SIZE(chararray input)inputinput中字符的個(gè)數(shù)0.2(chararray) STRSPLIT(chararray source)按照空格分隔字符串source:將進(jìn)行分割的字符串source分割后的使用包含一個(gè)字段的tuple存放各個(gè)部分0.8(chararray) STRSPLIT(chararra
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 職場(chǎng)中自我管理的藝術(shù)計(jì)劃
- 膝痹中醫(yī)護(hù)理措施
- 班級(jí)資源共享平臺(tái)的搭建計(jì)劃
- 《貴州新宜礦業(yè)(集團(tuán))有限公司普安縣樓下鎮(zhèn)郭家地煤礦(變更)礦產(chǎn)資源綠色開發(fā)利用方案(三合一)》評(píng)審意見(jiàn)
- 管路護(hù)理新進(jìn)展
- 紅斑狼瘡護(hù)理診斷及護(hù)理措施
- 統(tǒng)編版小學(xué)語(yǔ)文二年級(jí)下冊(cè)第22課《小毛蟲》精美課件
- 2025年鹽城如何考貨運(yùn)從業(yè)資格證
- 2025年張掖貨運(yùn)資格證考試有哪些項(xiàng)目
- 2025年嘉峪關(guān)貨運(yùn)上崗證考試題庫(kù)1387題
- 《苗圃生產(chǎn)與管理》教案-第二章 園林苗木的種實(shí)生產(chǎn)
- 2025年西安鐵路職業(yè)技術(shù)學(xué)院高職單招高職單招英語(yǔ)2016-2024歷年頻考點(diǎn)試題含答案解析
- 化工原理完整(天大版)課件
- 2025年陜西延長(zhǎng)石油有限責(zé)任公司招聘筆試參考題庫(kù)含答案解析
- 《淞滬會(huì)戰(zhàn)》課件
- Excel辦公技巧培訓(xùn)
- 《信息論緒論》課件
- 新時(shí)代大學(xué)生勞動(dòng)教育 課件 第5章 勞動(dòng)素養(yǎng)及其養(yǎng)成
- 2024年度英語(yǔ)課件容貌焦慮
- 初一家長(zhǎng)會(huì)課件96108
- 《企業(yè)文化概述》課件
評(píng)論
0/150
提交評(píng)論