集約UDFが保存する必要のある中間結果の型は、UDFが行なう計算の型と、メソッドがバイト アレイとして中間結果を表現しようとしているのか、オブジェクトとして表現しようとしているのかによって決まります。
下記の式を使用して標準偏差を計算する関数STD_DEV(x)があるとします。
この計算式に基づいて、UDFでは次のデータを記憶する必要があります。
- N
- sum(X 2)
- sum(X)
次のサンプルは、agr_storageと呼ばれるJavaクラスの例で、このクラスは必要な中間値に適合したフィールドを持っています。
class agr_storage implements Serializable{ double count; double x_sq; double x_sum; public agr_storage(double a, double b, double c){ count = a; x_sq = b; x_sum = c; } }
別の方法として、特にパフォーマンスを改善する必要のある場合は、集約UDFを実装するメソッドは中間結果を格納するのにByteBufferを使用できます。ByteBufferのputDouble()とgetDouble()メソッドを必要な中間値の格納に使用します。