HiveにUDFを登録する
既に DistanceCalculator
UDFを作成したので、天文学的データを処理するためにHiveに登録する必要があります。
まず、次のコマンドを実行してHiveシェルを起動します。
hive
Hiveシェルに入ったら、DistanceCalculator
UDFを使用して一時的な関数を作成します。
ADD JAR /home/hadoop/udfs/distance_calculator.jar;
CREATE TEMPORARY FUNCTION distance_calculator AS 'DistanceCalculator';
ADD JAR
コマンドは、コンパイル済みのUDFを含むJARファイルをHive環境に追加し、CREATE TEMPORARY FUNCTION
コマンドは DistanceCalculator
クラスを参照する distance_calculator
と呼ばれる一時的な関数を作成します。
これで、Hiveクエリで distance_calculator
関数を使用できるようになりました。たとえば、サンプルテーブル celestial_objects
を作成して、2つの天体間の距離を計算してみましょう。
CREATE TABLE celestial_objects (
name STRING,
x DOUBLE,
y DOUBLE,
z DOUBLE
);
このクエリは、天体の名前と座標用の列を持つ celestial_objects
テーブルを作成します。
INSERT INTO celestial_objects VALUES
('Earth', 0.0, 0.0, 0.0),
('Moon', 384400.0, 0.0, 0.0),
('Mars', 227940000.0, 0.0, 0.0);
次に、地球、月、火星のサンプルデータを挿入します。
SELECT
o1.name AS object1,
o2.name AS object2,
distance_calculator(o1.x, o1.y, o1.z, o2.x, o2.y, o2.z) AS distance
FROM celestial_objects o1
CROSS JOIN celestial_objects o2
WHERE o1.name < o2.name;
最後に、すべての天体のペア間でクロス結合を行い、distance_calculator
UDFを使用してそれらの間の距離を計算します。
出力は次のようになるはずです。
object1 object2 distance
Earth Moon 384400.0
Mars Moon 2.275556E8
Earth Moon 384400.0
...