0

Java で最初の Pig UDF をビルドしようとしていますが、Eclipse でビルドするときに関数を呼び出すのに問題があります (クラス パスに pig 0.10.0 jar ファイルがあります)。ソースファイルが入って/com/foo/bar/pig/IsInternal.javaおり、クラスファイルは/bin/com/foo/bar/pig/IsInternal.classEclipseによって配置されています。

私のコードは次のようになります。

package com.foo.bar.pig;

// ... imports ...

public class IsInternal extends FilterFunc {
    public Boolean exec(Tuple input) throws IOException {
        // ... code here ...
        return true; // or false
    }
}

コンパイルしたらjar -cf PiggyBank.jar BiggyBank、プロジェクト ディレクトリのすぐ外側から実行して、すべてを JAR にパッケージ化します。Pig を実行すると、grunt シェルで次のことを試します。

REGISTER /full/path/to/PiggyBank.jar
DEFINE isInternal com.foo.bar.pig.IsInternal();

A = LOAD '/some/file/in/hdfs' USING PigStorage();
B = FILTER A BY isInternal($1);

その時点で、次のエラーが表示されます。

ERROR 1070: Could not resolve com.foo.bar.pig.IsInternal using imports: [, org.apache.pig.builtin, org.apache.pig.impl.builtin.]

Java コード自体は問題なく (テスト済みです)、DEFINE でさまざまなクラス パスを試してみましたが、うまくいきませんでした。オンラインで役立つものは何も見つかりませんでした。どうすればこれを修正できますか?

4

2 に答える 2

1

手で .jar にパッケージ化するのは少し気が引けます。Eclipse プロジェクトに入れて、そこからエクスポートしてみてください。

また、jarのディレクトリ構造を確認できますか?次のようになります。PiggyBank.jar/com/foo/bar/pig/IsInternal.class

于 2012-06-07T22:13:04.120 に答える
0

このエラーは、UDF のクラスパス パス エラーを修正していないように見えます。このリンクでも同じ問題がありました。上記のエラーを修正する方法を説明しています。それがあなたを助けることを願っています。

于 2013-09-24T05:46:11.050 に答える