プロパティファイルで定義された値に従ってマップ内のキーと値のペアを解析するカスタムHiveUDFを作成しています。検証中の形式(Map <String、String>、String)。最初の引数を評価するマップにし、2番目の引数をプロパティファイルを含めることを目的としています。
私が抱えている問題は、initialize()関数がObjectInspectorsとして引数をキャストするため、GenericUDFクラスは、これらの値の両方がクエリに対して動的であることを期待しているように見えることです。彼らは検査しています。
初期化関数でプロパティファイルをロードし、evaluate関数で合格/不合格を返すようにします。これは私が試したすべてをカバーするのにほぼ十分なコードではありませんが、うまくいけば、彼らが問題について良い考えをしていることを知っている誰かにそれを与えるでしょう:
public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException {
mapOI = (MapObjectInspector) arguments[0];
StringObjectInspector stringOI = (StringObjectInspector) arguments[1];
try {
// Begin Debug
System.out.println(stringOI.getPrimitiveJavaObject(((DeferredObject) arguments[1]).get()));
// End Debug
loadProperties(stringOI.getPrimitiveJavaObject(((DeferredObject) arguments[1]).get()));
}
catch (HiveException exception) {
throw new UDFArgumentTypeException(1, "Failed to cast properties file path for evaluation by loadProperties... What did you do?");
}