0

ハイブで新しいUDFを作成しようとしています。いくつかのUDFは、Hiveの組み込みUDFの単なる変更です。Hiveで既存の組み込みUDFを使用してラッパーを作成する方法は?

私は中央値を計算する必要があるたび中央値関数は、この手段

select percentile(cast(column as BIGINT), 0.5) from table_name 

として書かれている例えば、私は上記の指定された問合せをリライトする必要があります。新しいUDFを作成して既存のUDF パーセンタイルをJavaコードでラップする方法はありますか?

既存の組み込みUDFのラッパーになる新しいUDFを作成するにはどうすればよいですか?

答えて

3

あなたはcallUDF機能を使用することができます:あなたがが巣UDFの呼び出しを使用することはできません

def median(expr: org.apache.spark.sql.Column): org.apache.spark.sql.Column = { 
    callUDF("percentile", expr, lit(0.5)) 
} 

df.select(median($"x")) 

import org.apache.spark.sql.functions.{callUDF, lit} 

val df = Seq((1L, 3L), (2L, 5L), (3L, 4L)).toDF("id", "x") 
df.select(callUDF("percentile", $"x", lit(0.5))) 

だから、中央値は、このような機能になりますが。 UDFは、列ではなく抽出された値を処理する関数をラップします。

+0

@eliasah \t \t JavaでUDFを実装しています。では、Percentileを内部的に呼び出すUDF-中央値の上にどのように記述しますか? – Amnesiac

+0

UDFを書くのとは違う 'Column' - >' Column'から関数を書くことができます。私は答えを更新しました。 – zero323

+0

ありがとうございます。これはUDFではないでしょうか?これは私が呼び出す機能に過ぎません。だから私はSpark-SQLシェルでどのように使用しますか? – Amnesiac

0

すべてのハイブudfsは、spark sqlからアクセスできます。あなたはspark sqlであなた自身のudfを熟読し、その中のハイブudfsを使うことができます。 sqlContext.udf.register((x、percentileValue)=> {//それらのパラメータを使用してメソッドを実装する})

+0

私はJavaでUDFを実装しています。では、Percentileを内部的に呼び出すUDF-中央値の上にどのように記述しますか? – Amnesiac

関連する問題