日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
創(chuàng)新互聯(lián)ApachePig教程:ApachePig用戶定義函數(shù)(UDF)

除了內(nèi)置函數(shù)之外,Apache Pig還為 User Defined Function(UDF:用戶定義函數(shù))提供廣泛的支持。使用這些UDF,可以定義我們自己的函數(shù)并使用它們。UDF支持六種編程語言,即Java,Jython,Python,JavaScript,Ruby和Groovy。

成都創(chuàng)新互聯(lián)公司成都網(wǎng)站建設(shè)按需開發(fā)網(wǎng)站,是成都網(wǎng)站營(yíng)銷推廣公司,為銅雕雕塑提供網(wǎng)站建設(shè)服務(wù),有成熟的網(wǎng)站定制合作流程,提供網(wǎng)站定制設(shè)計(jì)服務(wù):原型圖制作、網(wǎng)站創(chuàng)意設(shè)計(jì)、前端HTML5制作、后臺(tái)程序開發(fā)等。成都網(wǎng)站設(shè)計(jì)熱線:028-86922220

對(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的類型

在使用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

要使用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)系。

 
	
   4.0.0 
   Pig_Udf 
   Pig_Udf 
   0.0.1-SNAPSHOT
	
       
      src    
            
                 
            maven-compiler-plugin        
            3.3        
                      
               1.7          
               1.7        
                  
             
        
   
	
    
	
                  
         org.apache.pig            
         pig            
         0.15.0     
       
		
              
         org.apache.hadoop            
         hadoop-core            
         0.20.2     
       
      
     
	

  • 保存文件并刷新它。在 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{ 

   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

在編寫UDF和生成Jar文件后,請(qǐng)按照下面給出的步驟:

步驟1:注冊(cè)Jar文件

在寫入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

步驟2:定義別名

注冊(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();

步驟3:使用UDF

定義別名后,可以使用與內(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)

分享文章:創(chuàng)新互聯(lián)ApachePig教程:ApachePig用戶定義函數(shù)(UDF)
標(biāo)題網(wǎng)址:http://m.5511xx.com/article/codgchh.html