[HADOOP] Pig Latin의 STRSPLIT 및 REGEX_EXTRACT_ALL
HADOOPPig Latin의 STRSPLIT 및 REGEX_EXTRACT_ALL
다음 파일이 있습니다.
File
----
12-3 John 121
5-1 Sam 122
파일은 탭 (\ t)으로 구분됩니다. 개별 필드에서 데이터가 분할되지 않도록 행을 행 : chararray로로드하고 있습니다.
이제 세부 정보 (12-3 및 5-1)를 별도의 데이터로 가져와 저장하고 싶습니다.
STRSPLIT 및 REGEX_EXTRACT_ALL로 시도하고 있지만 데이터가 일치하지 않는 것 같습니다.
splitdata = FOREACH filedata {
regex = REGEX_EXTRACT_ALL(line, '^([0-9]*)\\-([0-9]*)');
split = STRSPLIT(line, '\\t', 1);
GENERATE regex, split;
};
이것이 내가 최종 데이터를 원하는 방식입니다.
(12, 3, 12-3 John 121)
( 5, 1, 5-1 Sam 122)
해결법
-
==============================
1.이건 어떤가요:
이건 어떤가요:
A = LOAD .... AS (line:chararray); B = FOREACH A GENERATE FLATTEN(REGEX_EXTRACT_ALL(line, '^(.*)\t(.*)\t(.*)$')) AS (id:chararray, name:chararray, nameid:chararray); C = FOREACH B GENERATE FLATTEN(REGEX_EXTRACT_ALL(id, '^([0-9]*)\\-([0-9]*)')), id, name, nameid; STORE C INTO ...
로드 할 때 행을 \ t를 따라 필드로 분할하면 B = ...를 건너 뛸 수 있습니다.
-
==============================
2.감사합니다 Lorand.
감사합니다 Lorand.
REGEX_EXTRACT_ALL을 사용하는 방법에 대해 약간의 아이디어를 주었으므로 여기에 마지막으로 사용한 방법이 있습니다.
FOREACH A GENERATE FLATTEN(REGEX_EXTRACT_ALL(line, '^([0-9]*)\\-([0-9]*).*')) AS (FIELD1:chararray, FIELD2:chararray), line;
Matcher.matches ()는 '^ ([0-9] *) \\-([0-9] *)'에 대해 실패하지만 '^ ([0-9] *) \\- ([0-9] *). * '.
from https://stackoverflow.com/questions/13396778/strsplit-and-regex-extract-all-in-piglatin by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] MapReduce 작업을 구성하는 동안 여러 InputFormat 클래스 사용 (0) | 2019.09.07 |
---|---|
[HADOOP] gradle이있는 groovy hadoop jar-패키지가 존재하지 않습니다 오류 (0) | 2019.09.07 |
[HADOOP] FATAL master.HMaster : 예기치 않은 상태 : .. 오프라인으로 전환 할 수 없습니다 (0) | 2019.09.07 |
[HADOOP] UDF에 전달하기 위해 가방을 절단 (0) | 2019.09.07 |
[HADOOP] S3 병렬 읽기 및 쓰기 성능? (0) | 2019.09.07 |