本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
從 Pig 呼叫使用者定義函數
Pig 提供從 Pig 指令碼內呼叫使用者定義函數 (UDFs) 的功能。您可以執行此操作來實作自訂處理,以用於您的 Pig 指令碼。目前支援的語言為 Java、Python/Jython 和 JavaScript (雖然 JavaScript支援仍為實驗性。)
以下區段說明如何使用 Pig 註冊您的函數,讓您可以從 Pig shell 或 Pig 指令碼呼叫他們。如需UDFs搭配 Pig 使用 的詳細資訊,請參閱適用於您 Pig 版本的 Pig 文件
從 Pig 呼叫JAR檔案
您可以使用 Pig 指令碼中的 REGISTER
命令搭配 Pig 使用自訂JAR檔案。JAR 檔案是本機或遠端檔案系統,例如 Amazon S3。當 Pig 指令碼執行時,Amazon 會自動將JAR檔案EMR下載至主節點,然後將JAR檔案上傳至 Hadoop 分散式快取。如此一來,叢集中的所有執行個體都會視需要自動使用該JAR檔案。
將JAR檔案與 Pig 搭配使用
-
將自訂JAR檔案上傳至 Amazon S3。
-
使用 Pig 指令碼中的
REGISTER
命令,在自訂JAR檔案的 Amazon S3 上指定儲存貯體。REGISTER
s3://amzn-s3-demo-bucket/path/mycustomjar.jar
;
從 Pig 呼叫 Python/Jython 指令碼
您可以使用 Pig 註冊 Python 指令碼,然後從 Pig shell 在那些指令碼中或在 Pig 指令碼中呼叫函數。您可以透過指定含 register
關鍵字的指令碼位置來這麼做。
由於 Pig 是以 Java 編寫,它會使用 Jython 指令碼引擎來剖析 Python 指令碼。如需 Jython 的詳細資訊,請前往 http://www.jython.org/
從 Pig 呼叫 Python/Jython 指令碼
-
撰寫 Python 指令碼並將指令碼上傳至 Amazon S3 中的位置。這應該是由建立 Pig 叢集或有設定許可之相同帳戶所擁有的儲存貯體,可讓建立叢集的帳戶可以進行存取。在此範例中,指令碼會上傳至 s3://amzn-s3-demo-bucket/pig/python。
-
啟動 Pig 叢集。如果您是從 Grunt shell 存取 Pig,請執行互動式叢集。如果您是從指令碼執行 Pig 命令,請啟動以指令碼編寫的 Pig 叢集。此範例會啟動互動式叢集。如需建立 Pig 叢集方式的詳細資訊,請參閱 提交 Pig 工作。
-
對於互動式叢集,請使用 SSH 連線到主節點並執行 Grunt Shell。如需詳細資訊,請參閱SSH主節點 中的 。
-
透過在命令列輸入
pig
來針對 Pig 執行 Grunt shell:pig
-
在 Grunt 命令提示字元使用
register
關鍵字搭配 Pig 註冊 Jython 程式庫和 Python 指令碼,如以下命令所示,其中您可以在 Amazon S3 中指定指令碼的位置:grunt> register 'lib/jython.jar'; grunt> register '
s3://amzn-s3-demo-bucket/pig/python/myscript.py
' using jython as myfunctions; -
載入輸入資料。以下範例會從 Amazon S3 位置載入輸入:
grunt> input = load '
s3://amzn-s3-demo-bucket/input/data.txt
' using TextLoader as (line:chararray); -
您現在可以透過使用
myfunctions
來參考函數以從 Pig 在指令碼中呼叫它們:grunt> output=foreach input generate myfunctions.myfunction($1);