복붙노트

[HADOOP] UserAgent 문자열에서 값을 제거하는 Java 또는 Pig 정규식

HADOOP

UserAgent 문자열에서 값을 제거하는 Java 또는 Pig 정규식

사용자 에이전트 문자열의 '괄호로 묶은'구성 요소에서 세 번째 및 후속 값을 제거해야합니다.

얻기 위해

...에서

sed 명령을 성공적으로 사용합니다

 sed 's/(\([^;]\+; [^;]\+\)[^)]*)/(\1)/'

Java 정규식을 사용하여 Apache Pig에서 동일한 결과를 얻어야합니다. 아무도 위의 sed 정규 표현식을 Java로 다시 작성하는 데 도움을 줄 수 있습니까?

다음과 같은 것 :

new = FOREACH userAgent GENERATE FLATTEN(EXTRACT(userAgent, 'JAVA REGEX?') as (term:chararray);

해결법

  1. ==============================

    1.필자는 Pig를 사용하지 않지만 문서를 살펴보면 Java의 replaceAll () 메소드를 래핑하는 REPLACE 함수가 나타납니다. 이 시도:

    필자는 Pig를 사용하지 않지만 문서를 살펴보면 Java의 replaceAll () 메소드를 래핑하는 REPLACE 함수가 나타납니다. 이 시도:

    REPLACE(userAgent, '\(([^;]+; [^;]+)[^)]*\)', '($1)')
    

    이는 UserAgent 문자열의 전체 괄호로 묶은 부분과 일치해야하며 sed 명령과 마찬가지로 내용을 세미콜론으로 구분 된 첫 두 단어로 바꿉니다.

  2. ==============================

    2.Java에서는 Matcher 클래스를 사용하면 캡처 그룹을 추출 할 수 있습니다. 다음은 적어도 제공 한 테스트 사례에 대해 원하는 것을 수행하는 것으로 보입니다.

    Java에서는 Matcher 클래스를 사용하면 캡처 그룹을 추출 할 수 있습니다. 다음은 적어도 제공 한 테스트 사례에 대해 원하는 것을 수행하는 것으로 보입니다.

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    
    public class Test {
    
        public static void main(String[] args){
            String str = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; GTB6; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; WinTSI 06.12.2009; .NET CLR 3.0.30729; .NET4.0C)";
            //str = "aaa";
            Pattern pat = Pattern.compile("(.*\\(.*?;.*?;).*\\)");
            Matcher m = pat.matcher(str);
            System.out.println(m.lookingAt());
            String group = m.group(1) + ")";
            System.out.println(group);
        }
     }
    

    흠 ... 나는 JAVA가 아닌 'PIG'에서이 작업을 수행하는 방법을 요청했기 때문에 잘못된 질문에 대답 한 것 같습니다.

  3. ==============================

    3.제안 된 두 가지 솔루션 중 어느 것도 PIG에서 작동하지 않는 것처럼 sed stream을 사용하는 해결 방법을 게시합니다.

    제안 된 두 가지 솔루션 중 어느 것도 PIG에서 작동하지 않는 것처럼 sed stream을 사용하는 해결 방법을 게시합니다.

    user_agent_mangled = STREAM logs THROUGH `sed 's/(\\([^;]\\+; [^;]\\+\\)[^)]*)/(\\1)/'`;
    

    이것은 잘 작동하지만 여전히 원시 PIG 솔루션을 선호합니다 (EXTRACT 또는 REPLACE 기능 사용).

  4. from https://stackoverflow.com/questions/8236482/java-or-pig-regex-to-strip-out-values-from-useragent-string by cc-by-sa and MIT license