Apache pig Pig:对外部方法的多次调用

Apache pig Pig:对外部方法的多次调用,apache-pig,Apache Pig,我想在我的猪身上使用方法REPLACE、SUBSTRING和INDEXOF,但我无法很好地使用它 第一种情况:REGEX\u EXTRACT\u ALL中的REPLACE: data_split = FOREACH data GENERATE FLATTEN(REGEX_EXTRACT_ALL(line, MY_REGULAR_EXPRESSION)) AS ( timestamp: chararray, url: chararray, REPLACE(ur

我想在我的猪身上使用方法
REPLACE
SUBSTRING
INDEXOF
,但我无法很好地使用它

  • 第一种情况:
    REGEX\u EXTRACT\u ALL
    中的
    REPLACE

    data_split = FOREACH data GENERATE FLATTEN(REGEX_EXTRACT_ALL(line, 
        MY_REGULAR_EXPRESSION)) 
    AS (
        timestamp: chararray,
        url: chararray,
        REPLACE(url , '.*?://', '') AS clean_url: chararray);
    
我想使用REPLACE删除URL中的前导
http://
。在这种情况下,我得到:

Error during parsing. Encountered " "(" "( ""
  • 第二种情况:重用输出:

    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
            ;
    
这两种情况都不起作用,当我尝试重用上一次调用
REPLACE
中的
clean_url
时,我得到了

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

谢谢

我认为您不能在指定模式的
AS子句中使用
UDF
。 我想你已经用这种方式得到了:

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;
...

至于你的第二个问题:
你用的是哪种清管器版本?我认为这是一个,在版本0.10.0中,我无法复制它。

我认为不能在指定模式的
AS子句中使用
UDF
。 我想你已经用这种方式得到了:

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;
...
至于你的第二个问题:
你用的是哪种清管器版本?我认为这是一个,在版本0.10.0中,我无法复制它