Apache Pig中UDF有什么用,支持哪些編程語言
Admin 2022-09-30 群英技術(shù)資訊 1121 次瀏覽
今天這篇我們來學(xué)習(xí)和了解“Apache Pig中UDF有什么用,支持哪些編程語言”,下文的講解詳細(xì),步驟過程清晰,對(duì)大家進(jìn)一步學(xué)習(xí)和理解“Apache Pig中UDF有什么用,支持哪些編程語言”有一定的幫助。有這方面學(xué)習(xí)需要的朋友就繼續(xù)往下看吧!除了內(nèi)置函數(shù)之外,Apache Pig還為 User Defined Function(UDF:用戶定義函數(shù))提供廣泛的支持。使用這些UDF,可以定義我們自己的函數(shù)并使用它們。UDF支持六種編程語言,即Java,Jython,Python,JavaScript,Ruby和Groovy。
對(duì)于編寫UDF,在Java中提供全面的支持,并在所有其他語言中提供有限的支持。使用Java,你可以編寫涉及處理的所有部分的UDF,如數(shù)據(jù)加載/存儲(chǔ),列轉(zhuǎn)換和聚合。由于Apache Pig是用Java編寫的,因此與其他語言相比,使用Java語言編寫的UDF工作效率更高。
在Apache Pig中,我們還有一個(gè)用于UDF名為 Piggybank 的Java存儲(chǔ)庫。使用Piggybank,我們可以訪問由其他用戶編寫的Java UDF,并貢獻(xiàn)我們自己的UDF。
在使用Java編寫UDF時(shí),我們可以創(chuàng)建和使用以下三種類型的函數(shù)
Filter函數(shù) - Filter(過濾)函數(shù)用作過濾器語句中的條件。這些函數(shù)接受Pig值作為輸入并返回布爾值。
Eval函數(shù) - Eval函數(shù)在FOREACH-GENERATE語句中使用。這些函數(shù)接受Pig值作為輸入并返回Pig結(jié)果。
Algebraic函數(shù) - Algebraic(代數(shù))函數(shù)對(duì)FOREACHGENERATE語句中的內(nèi)包起作用。這些函數(shù)用于對(duì)內(nèi)包執(zhí)行完全MapReduce操作。
要使用Java編寫UDF,我們必須集成jar文件 Pig-0.15.0.jar 。在本章節(jié)中,將討論如何使用Eclipse編寫示例UDF。在繼續(xù)學(xué)習(xí)前,請(qǐng)確保你已在系統(tǒng)中安裝了Eclipse和Maven。
按照下面給出的步驟寫一個(gè)UDF函數(shù):
打開Eclipse并創(chuàng)建一個(gè)新項(xiàng)目(例如 myproject )。
將新創(chuàng)建的項(xiàng)目轉(zhuǎn)換為Maven項(xiàng)目。
在pom.xml中復(fù)制以下內(nèi)容。此文件包含Apache Pig和Hadoop-core jar文件的Maven依賴關(guān)系。
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0http://maven.apache .org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>Pig_Udf</groupId>
<artifactId>Pig_Udf</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.apache.pig</groupId>
<artifactId>pig</artifactId>
<version>0.15.0</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-core</artifactId>
<version>0.20.2</version>
</dependency>
</dependencies>
</project>
保存文件并刷新它。在 Maven依賴關(guān)系部分中,可以找到下載的jar文件。
創(chuàng)建名為 Sample_Eval 的新的類文件,并在其中復(fù)制以下內(nèi)容。
import java.io.IOException;
import org.apache.pig.EvalFunc;
import org.apache.pig.data.Tuple;
import java.io.IOException;
import org.apache.pig.EvalFunc;
import org.apache.pig.data.Tuple;
public class Sample_Eval extends EvalFunc<String>{
public String exec(Tuple input) throws IOException {
if (input == null || input.size() == 0)
return null;
String str = (String)input.get(0);
return str.toUpperCase();
}
}
在編寫UDF時(shí),必須繼承EvalFunc類并向 exec() 函數(shù)提供實(shí)現(xiàn)。在此函數(shù)中,寫入U(xiǎn)DF所需的代碼。在上面的例子中,我們返回了將給定列的內(nèi)容轉(zhuǎn)換為大寫的代碼。
編譯完類并確認(rèn)沒有錯(cuò)誤后,右鍵單擊Sample_Eval.java文件。它將呈現(xiàn)一個(gè)菜單。選擇“export”,如以下屏幕截圖所示。
點(diǎn)擊“export”,將看到以下窗口。 點(diǎn)擊“JAR file”。
點(diǎn)擊“Next>”按鈕繼續(xù)操作。將獲得另一個(gè)窗口,你需要在本地文件系統(tǒng)中輸入路徑,在其中存儲(chǔ)jar文件。
最后,單擊“Finish”按鈕。在指定的文件夾中,創(chuàng)建一個(gè)Jar文件 sample_udf.jar 。此jar文件包含用Java編寫的UDF。
在編寫UDF和生成Jar文件后,請(qǐng)按照下面給出的步驟:
在寫入U(xiǎn)DF(在Java中)后,我們必須使用Register運(yùn)算符注冊(cè)包含UDF的Jar文件。通過注冊(cè)Jar文件,用戶可以將UDF的位置綁定到Apache Pig。
語法
下面給出了Register運(yùn)算符的語法。
REGISTER path;
例
讓我們注冊(cè)本章前面創(chuàng)建的sample_udf.jar。以本地模式啟動(dòng)Apache Pig并注冊(cè)jar文件sample_udf.jar,如下所示。
$cd PIG_HOME/bin $./pig –x local REGISTER '/$PIG_HOME/sample_udf.jar'
注意:假設(shè)路徑中的Jar文件:/$PIG_HOME/sample_udf.jar
注冊(cè)UDF后,可以使用 Define 運(yùn)算符為其定義一個(gè)別名。
語法
下面給出了Define運(yùn)算符的語法。
DEFINE alias {function | [`command` [input] [output] [ship] [cache] [stderr] ] };
例
定義sample_eval的別名,如下所示。
DEFINE sample_eval sample_eval();
定義別名后,可以使用與內(nèi)置函數(shù)相同的UDF。假設(shè)在HDFS /Pig_Data/ 目錄中有一個(gè)名為emp_data的文件,其中包含以下內(nèi)容。
001,Robin,22,newyork 002,BOB,23,Kolkata 003,Maya,23,Tokyo 004,Sara,25,London 005,David,23,Bhuwaneshwar 006,Maggy,22,Chennai 007,Robert,22,newyork 008,Syam,23,Kolkata 009,Mary,25,Tokyo 010,Saran,25,London 011,Stacy,25,Bhuwaneshwar 012,Kelly,22,Chennai
并假設(shè)我們已將此文件加載到Pig中,如下所示。
grunt> emp_data = LOAD 'hdfs://localhost:9000/pig_data/emp1.txt' USING PigStorage(',')
as (id:int, name:chararray, age:int, city:chararray);
現(xiàn)在使用UDF sample_eval 將員工的姓名轉(zhuǎn)換為大寫。
grunt> Upper_case = FOREACH emp_data GENERATE sample_eval(name);
請(qǐng)驗(yàn)證關(guān)系 Upper_case 的內(nèi)容,如下所示。
grunt> Dump Upper_case; (ROBIN) (BOB) (MAYA) (SARA) (DAVID) (MAGGY) (ROBERT) (SYAM) (MARY) (SARAN) (STACY) (KELLY)
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:[email protected]進(jìn)行舉報(bào),并提供相關(guān)證據(jù),查實(shí)之后,將立刻刪除涉嫌侵權(quán)內(nèi)容。
猜你喜歡
近幾年,大數(shù)據(jù),云計(jì)算逐漸走入大眾視野,很多人應(yīng)該都有聽說大數(shù)據(jù)和云計(jì)算。對(duì)于這兩者的關(guān)系,更多會(huì)混淆,因此這篇文章就給大家簡單的介紹關(guān)于云計(jì)算和大數(shù)據(jù)的關(guān)系究竟是怎樣的,感興趣的朋友可以看看。
一個(gè)正常運(yùn)營的產(chǎn)品每天會(huì)產(chǎn)生大量的數(shù)據(jù),如果把這些數(shù)據(jù)都收集起來進(jìn)行分析,不僅會(huì)使工作量增加,浪費(fèi)大量時(shí)間,很可能還會(huì)得不到想要的分析結(jié)果。作為一名數(shù)據(jù)分析人員,更不應(yīng)該為了分析而分析,而是應(yīng)該緊緊圍繞你的分析目的(了解現(xiàn)狀、分析業(yè)務(wù)變動(dòng)原因、預(yù)測(cè)發(fā)展趨勢(shì)等)去進(jìn)行分析。所以,在開始數(shù)據(jù)收集工作之前,就應(yīng)該先把數(shù)據(jù)分析的目的梳理清楚,防止出現(xiàn)”答非所問”的數(shù)據(jù)分析結(jié)果。
Hadoop寫文件的實(shí)現(xiàn)及要點(diǎn)有哪些?1.客戶端將文件寫入本地磁盤的 HDFS Client 文件中;2.當(dāng)臨時(shí)文件大小達(dá)到一個(gè) block 大小時(shí),HDFS client 通知 NameNode,申請(qǐng)寫入文件;3.NameNode 在 HDFS 的文件系統(tǒng)中創(chuàng)建一_來自Hadoop 教程,w3cschool編程獅。
ORDER BY 運(yùn)算符用于以基于一個(gè)或多個(gè)字段的排序順序顯示關(guān)系的內(nèi)容。語法下面給出了 ORDER BY 運(yùn)算符的語法。grunt> Relation_name2 = ORDER Relatin_name1 BY (ASC|DESC);
配置hadoop之前做好準(zhǔn)備工作1.修改主機(jī)名稱,我這里創(chuàng)建了三個(gè)虛擬主機(jī),分別命名node-1,node-2,node-3,進(jìn)入 network 文件刪掉里面的內(nèi)容直接寫上主機(jī)名就可以了vi /etc/sysconfig/network2.映射 IP 和主機(jī)名,之后 reboot 重啟主機(jī)
推薦內(nèi)容
相關(guān)標(biāo)簽
成為群英會(huì)員,開啟智能安全云計(jì)算之旅
立即注冊(cè)關(guān)注或聯(lián)系群英網(wǎng)絡(luò)
7x24小時(shí)售前:400-678-4567
7x24小時(shí)售后:0668-2555666
24小時(shí)QQ客服
群英微信公眾號(hào)
CNNIC域名投訴舉報(bào)處理平臺(tái)
服務(wù)電話:010-58813000
服務(wù)郵箱:[email protected]
投訴與建議:0668-2555555
Copyright ? QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版權(quán)所有
增值電信經(jīng)營許可證 : B1.B2-20140078 ICP核準(zhǔn)(ICP備案)粵ICP備09006778號(hào) 域名注冊(cè)商資質(zhì) 粵 D3.1-20240008