[HADOOP] UserAgent 문자열에서 값을 제거하는 Java 또는 Pig 정규식
HADOOPUserAgent 문자열에서 값을 제거하는 Java 또는 Pig 정규식
사용자 에이전트 문자열의 '괄호로 묶은'구성 요소에서 세 번째 및 후속 값을 제거해야합니다.
얻기 위해
...에서
sed 명령을 성공적으로 사용합니다
sed 's/(\([^;]\+; [^;]\+\)[^)]*)/(\1)/'
Java 정규식을 사용하여 Apache Pig에서 동일한 결과를 얻어야합니다. 아무도 위의 sed 정규 표현식을 Java로 다시 작성하는 데 도움을 줄 수 있습니까?
다음과 같은 것 :
new = FOREACH userAgent GENERATE FLATTEN(EXTRACT(userAgent, 'JAVA REGEX?') as (term:chararray);
해결법
-
==============================
1.필자는 Pig를 사용하지 않지만 문서를 살펴보면 Java의 replaceAll () 메소드를 래핑하는 REPLACE 함수가 나타납니다. 이 시도:
필자는 Pig를 사용하지 않지만 문서를 살펴보면 Java의 replaceAll () 메소드를 래핑하는 REPLACE 함수가 나타납니다. 이 시도:
REPLACE(userAgent, '\(([^;]+; [^;]+)[^)]*\)', '($1)')
이는 UserAgent 문자열의 전체 괄호로 묶은 부분과 일치해야하며 sed 명령과 마찬가지로 내용을 세미콜론으로 구분 된 첫 두 단어로 바꿉니다.
-
==============================
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.제안 된 두 가지 솔루션 중 어느 것도 PIG에서 작동하지 않는 것처럼 sed stream을 사용하는 해결 방법을 게시합니다.
제안 된 두 가지 솔루션 중 어느 것도 PIG에서 작동하지 않는 것처럼 sed stream을 사용하는 해결 방법을 게시합니다.
user_agent_mangled = STREAM logs THROUGH `sed 's/(\\([^;]\\+; [^;]\\+\\)[^)]*)/(\\1)/'`;
이것은 잘 작동하지만 여전히 원시 PIG 솔루션을 선호합니다 (EXTRACT 또는 REPLACE 기능 사용).
from https://stackoverflow.com/questions/8236482/java-or-pig-regex-to-strip-out-values-from-useragent-string by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 쿼리 결과에 정수 고유 ID를 추가하는 방법-__efficiently__? (0) | 2019.09.10 |
---|---|
[HADOOP] java를 사용하는 Titan-1.0.0 + Hbase-0.98.20의 원격 모드에서 연결 오류 (0) | 2019.09.10 |
[HADOOP] Apache Sqoop을 사용하여 Mongo / Cassandra에서 HDFS로 데이터 내보내기 (0) | 2019.09.09 |
[HADOOP] 시스템 디렉토리를 가져 오지 못했습니다-hadoop (0) | 2019.09.09 |
[HADOOP] NodeManager에 대한 Windows 2008 R2 x64의 Hadoop 2.3.0 (0) | 2019.09.09 |