2012-08-31 3 views
1

내 돼지에서 방법 REPLACE, SUBSTRINGINDEXOF을 사용하고 싶지만 좋은 방법으로 사용할 수 없습니다.돼지 : 외부 호출을 여러 번 호출

  • 첫 번째 경우 : 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); 
    

나는 URL에있는 주요한 http://을 제거하기 위해 REPLACE 사용하고 싶습니다. 이 경우 내가 점점 오전 :

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. 

감사합니다.

답변

1

내에서 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; 
... 

:
사용을 사용합니까 어떤 돼지 버전? 이건 bug이라고 생각합니다. 버전 0.10.0에서는 재현 할 수 없었습니다.

관련 문제