1

メソッドとPigを使用したいREPLACESUBSTRINGですINDEXOFが、うまく使用できません。

  • 最初のケース:REPLACEREGEX_EXTRACT_ALL

    data_split = FOREACH data GENERATE FLATTEN(REGEX_EXTRACT_ALL(line, 
        MY_REGULAR_EXPRESSION)) 
    AS (
        timestamp: chararray,
        url: chararray,
        REPLACE(url , '.*?://', '') AS clean_url: chararray);
    

http://REPLACEを使用して先頭のURLを削除したいと思います。この場合、私は次のようになります。

Error during parsing. Encountered " "(" "( ""
  • 2番目のケース:出力の再利用:

    ws = FOREACH data_split {
        clean_url = REPLACE(url , '.*?://', '');
        url_index = INDEXOF(clean_url, '/');
        web_server = SUBSTRING(clean_url, 0, url_index);
        GENERATE
            web_server,
            timestamp,
            ip
            ;
    

どちらの場合も機能しません。clean_url前回の呼び出しから再利用しようとするとREPLACE

Attempt to give operator of type 
    org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.POUserFunc       
    multiple outputs.  This operator does not support multiple outputs.

ありがとう

4

1 に答える 1

1

スキーマが指定されているUDF内では使用できないと思います。AS clause私はあなたがすでにこのようにそれを持っていると思います:

inp = LOAD 'data.txt' AS (line:chararray);
data_split = FOREACH inp 
               GENERATE FLATTEN(REGEX_EXTRACT_ALL(line, MY_REGULAR_EXPRESSION)) 
               AS (url:chararray, timestamp:chararray);

res = FOREACH data_split GENERATE REPLACE(url , '.*?://', ''), timestamp;
...

2番目の質問について:
どのPigバージョンを使用しますか?これはバグだと思います。バージョン0.10.0では再現できませんでした。

于 2012-09-04T16:32:56.277 に答える