0

バッグのタプルを UDF に渡したいと思います。

すべての要素がarg2 つのバッグ (xy)のタプル ( ) であるこのデータ構造があります。

data:{arg: (x: {(a: int,b: int,)},y: {(a: int,b: int)})}

次に、UDF を作成しました。

public class MyUDF extends EvalFunc<String> {

     public String exec(Tuple input) throws IOException {
         if(input == null || input.size() == 0)
             return "empty";
         try{
            DataBag ref_regions = (DataBag)input.get(0);
            return "OK";
         }catch(Exception e){
             System.err.println(e.getMessage());
             return null;
         }
     }
}

そして、次のように PigLatin スクリプト内で呼び出します。

res = foreach data generate MyUDF(arg); 

残念ながら、次のエラーが発生しました。

org.apache.pig.data.BinSedesTuple cannot be cast to org.apache.pig.data.DataBag

catchこれは、ステートメントによって印刷されます。

それを直すのを手伝ってくれませんか?

4

1 に答える 1

0

どのバージョンの豚を実行していますか? これは 0.8.1 より前の問題でしたhttps://issues.apache.org/jira/browse/PIG-1895 BinSedes は通常、作成したテスト ファイルから読み取るときに呼び出されます。Tuple 入力を DataBag 入力に変更することをお勧めします。あなたのUDFで。

于 2013-09-21T23:20:12.027 に答える