3

次のような豚のスクリプトを実行しています

REGISTER '/home/vishal/FirstUdf.jar';
DEFINE UPPER com.first.UPPER();
A = LOAD '/home/vishal/exampleforPIG1' AS (exchange: chararray, symbol: chararray, date: int,value:float);
B= FOREACH A GENERATE com.first.UPPER(exchange);
DUMP B;

Following is my UDF in java

package com.first;

import java.io.IOException;

import org.apache.pig.EvalFunc;
import org.apache.pig.data.Tuple;
import org.apache.pig.impl.util.WrappedIOException;

@SuppressWarnings("deprecation")
public class UPPER extends EvalFunc<String> {
    public String exec(Tuple input) throws IOException {
        if (input == null || input.size() == 0)
            return null;
        try {
            String str = (String) input.get(0);
            return str.toLowerCase();
        } catch (Exception e) {
            throw WrappedIOException.wrap(
                    "Caught exception processing input row ", e);
        }
    }
}

それを実行しようとすると、次のエラーが表示されます

Pig Stack Trace

ERROR 1066: Unable to open iterator for alias B

org.apache.pig.impl.logicalLayer.FrontendException: ERROR 1066: Unable to open iterator for alias B
    at org.apache.pig.PigServer.openIterator(PigServer.java:866)
    at org.apache.pig.tools.grunt.GruntParser.processDump(GruntParser.java:683)
    at org.apache.pig.tools.pigscript.parser.PigScriptParser.parse(PigScriptParser.java:303)
    at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:190)
    at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:166)
    at org.apache.pig.tools.grunt.Grunt.exec(Grunt.java:84)
    at org.apache.pig.Main.run(Main.java:430)
    at org.apache.pig.Main.main(Main.java:111)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:156) Caused by: java.io.IOException: Job terminated with anomalous status FAILED
    at org.apache.pig.PigServer.openIterator(PigServer.java:858)
    ... 12 more

ブタのスクリプトでは、B ie のイテレータを開くことができないのはなぜですか (次の行にイテレータを割り当てることができません)。

B = FOREACH A GENERATE com.first.UPPER(exchange);

「exampleforPIG1」ファイルには次のデータがあります

NYSE    CPO 2009-12-30  0.14
NYSE    CPO 2009-09-28  0.14
NYSE    CPO 2009-06-26  0.14
NYSE    CPO 2009-03-27  0.14
NYSE    CPO 2009-01-06  0.14
NYSE    CCS 2009-10-28  0.414
NYSE    CCS 2009-07-29  0.414
..
..
etc
4

5 に答える 5

0

hadoop 2.2 に対して pig 0.12.0 またはそれ以前の jar を実行していますか? その場合、src から pig jar を再コンパイルすることでこのエラーを回避できました。debian タイプボックスに関連する手順の概要を次に示します。

  1. pig-0.12.0.tar.gz をダウンロードします
  2. jar を解凍して権限を設定する
  3. 次に、解凍​​されたディレクトリ内で 'ant clean jar -Dhadoopversion=23' を使用して src をコンパイルします。次に、同じディレクトリなど、maven のクラスパスで jar を取得する必要があります。

mvn install:install-file -Dfile=pig.jar -DgroupId={groupId を設定}- DartifactId={artifactId を設定} -Dversion=1.0 -Dpackaging=jar

またはEclipseの場合は、jarを外部ライブラリ/依存関係として追加します

hadoop 2.2.0 で pig 12 を実行しようとして正確なトレースを取得していましたが、上記の手順でうまくいきました

更新私は自分の問題を豚のジラに投稿し、彼らは応答しました。彼らはすでに hadoop2 pig-h2.jar 用にコンパイルされた豚の jar を持っていますhttp://search.maven.org/#artifactdetails|org.apache.pig|pig|0.12.0|jar この jar の maven タグは

org.apache.pig 豚 h2 0.12.0 提供

于 2016-08-26T18:54:05.873 に答える
0

さて、2つのこと、

  1. 大文字/小文字に型キャストするだけなら、組み込み関数の UPPER/LOWER を使用しないでください。使用方法はリファレンス マニュアルで確認できます。

  2. 同じ方法で継続する場合は、
    B = FOREACH A GENERATE UPPER(exchange); となります。
    すでに DEFINE UPPER com.first.UPPER(); として定義しています。

于 2013-05-16T18:45:38.353 に答える