Apache-pig-user-defined-functions
Apache Pig-ユーザー定義関数
組み込み関数に加えて、Apache Pigは* U ser D efined F * unctions(UDF)の広範なサポートを提供します。 これらのUDFを使用して、独自の関数を定義して使用できます。 UDFサポートは、Java、Jython、Python、JavaScript、Ruby、Groovyの6つのプログラミング言語で提供されます。
UDFを記述するために、Javaで完全なサポートが提供され、残りのすべての言語で限定的なサポートが提供されます。 Javaを使用すると、データのロード/ストア、列変換、集計などの処理のすべての部分を含むUDFを作成できます。 Apache PigはJavaで記述されているため、Java言語を使用して記述されたUDFは他の言語と比較して効率的に機能します。
Apache Pigには、 Piggybank という名前のUDFのJavaリポジトリもあります。 Piggybankを使用すると、他のユーザーが作成したJava UDFにアクセスし、独自のUDFを提供できます。
JavaのUDFの種類
Javaを使用してUDFを記述している間、次の3種類の関数を作成して使用できます-
- フィルター関数-フィルター関数はフィルターステートメントの条件として使用されます。 これらの関数は、入力としてPig値を受け入れ、ブール値を返します。
- 評価関数-評価関数はFOREACH-GENERATE文で使用されます。 これらの関数は、入力として豚の値を受け入れ、豚の結果を返します。
- 代数関数-代数関数は、FOREACHGENERATEステートメントの内部バッグに作用します。 これらの関数は、内側のバッグに対して完全なMapReduce操作を実行するために使用されます。
Javaを使用してUDFを記述する
Javaを使用してUDFを作成するには、jarファイル Pig-0.15.0.jar を統合する必要があります。 このセクションでは、Eclipseを使用してサンプルUDFを作成する方法について説明します。 さらに先に進む前に、システムにEclipseとMavenがインストールされていることを確認してください。
以下に示す手順に従って、UDF関数を記述します-
- Eclipseを開き、新しいプロジェクト( myproject など)を作成します。
- 新しく作成したプロジェクトをMavenプロジェクトに変換します。
- pom.xmlの次のコンテンツをコピーします。 このファイルには、Apache PigおよびHadoop-core jarファイルのMaven依存関係が含まれています。
UDFの作成中は、EvalFuncクラスを継承し、* exec()*関数に実装を提供することが必須です。 この関数内には、UDFに必要なコードが記述されています。 上記の例では、指定された列の内容を大文字に変換するコードを返しています。
- エラーなしでクラスをコンパイルした後、Sample_Eval.javaファイルを右クリックします。 メニューが表示されます。 次のスクリーンショットに示すように、 export を選択します。
- export をクリックすると、次のウィンドウが表示されます。 * JARファイル*をクリックします。
- Next> ボタンをクリックして、さらに進みます。 ローカルファイルシステムのパスを入力する必要がある別のウィンドウが表示されます。ここで、jarファイルを保存する必要があります。
- 最後に、 Finish ボタンをクリックします。 指定されたフォルダーに、Jarファイル sample_udf.jar が作成されます。 このjarファイルには、Javaで記述されたUDFが含まれています。
UDFを使用する
UDFを書いてJarファイルを生成した後、以下の手順に従ってください-
ステップ1:Jarファイルの登録
(Javaで)UDFを作成した後、Register演算子を使用してUDFを含むJarファイルを登録する必要があります。 Jarファイルを登録することにより、ユーザーはUDFの場所をApache Pigに関連付けることができます。
構文
以下に、Register演算子の構文を示します。
例
例として、この章の前半で作成したsample_udf.jarを登録しましょう。
Apache Pigをローカルモードで起動し、jarファイルsample_udf.jarを以下に示すように登録します。
注-パスにあるJarファイルを想定-/$PIG_HOME/sample_udf.jar
ステップ2:エイリアスを定義する
UDFを登録したら、 Define 演算子を使用してUDFにエイリアスを定義できます。
構文
以下に定義演算子の構文を示します。
- 例 *
以下に示すように、sample_evalのエイリアスを定義します。
ステップ3:UDFを使用する
エイリアスを定義した後、組み込み関数と同じUDFを使用できます。 HDFS*/Pig_Data/*ディレクトリに次の内容のemp_dataという名前のファイルがあるとします。
以下に示すように、このファイルをPigにロードしたと仮定します。
UDF sample_eval を使用して、従業員の名前を大文字に変換します。
以下に示すように、リレーション Upper_case の内容を確認します。