[HADOOP] 돼지 스크립트에서 정규식 로그에서 문자열을 추출
HADOOP돼지 스크립트에서 정규식 로그에서 문자열을 추출
나는 로그 데이터를하고 난 변수에 각 정보를 추출 할
다음은 샘플 한 줄의 로그입니다. {식> 306 : 이름 => "bblite": CPU => {용량 => 4 : => 4 할당} => 0 실제 : 메모리 => {용량 => 8192 : 할당 => 8192 : 실제 => 8578} : cluster_stats => { "wc1104"=> {CPU => 0 : MEM => 8578}}}
나는 모든 IDS, 모든 이름이 변수 모든 클러스터 통계가 CPU를 가지고 변수와 변수가 변수가 필요합니다
다음은 내 돼지 스크립트의 부분이다. 나는 ID를 저장할 수 있지만 정규식을 사용하여 나머지를 추출하는 방법을 모른다.
. . .
matching_messages = FILTER raw_lines BY (LOWER(message) MATCHES '.*cc_altus-plaform.*');
ids = FOREACH matching_messages GENERATE REGEX_EXTRACT(message,'id=>\\d*',0);
names = FOREACH matching_messages GENERATE REGEX_EXTRACT(message,'name=>\\"\\",',0);
line_with_date = FOREACH matching_messages GENERATE
DateFormatter(timestamp) AS formatted_time: chararray, message;
DUMP names;
해결법
-
==============================
1.다음 코드 조각은 작동 내가 쓴 정규식입니다 :
다음 코드 조각은 작동 내가 쓴 정규식입니다 :
id = FOREACH matching_messages GENERATE REGEX_EXTRACT(message,'(?<=id=>)\\d*',0); name = FOREACH matching_messages GENERATE REGEX_EXTRACT(message,'name=>\\"[\\w]*\\"',0); cpu = FOREACH matching_messages GENERATE REPLACE( REGEX_EXTRACT(message, 'cpu=>\\{.*?\\}',0), ',',''); memory = FOREACH matching_messages GENERATE REGEX_EXTRACT(message,'memory=>\\{.*?\\}',0); cluster = FOREACH matching_messages GENERATE REGEX_EXTRACT(message,'cluster_stats=>\\{.*?\\}',0);
from https://stackoverflow.com/questions/47184158/extracting-string-from-logs-with-regex-in-pig-script by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 하둡에서 OOM 예외가 아이를 감소 (0) | 2019.10.02 |
---|---|
[HADOOP] MRJob를 사용하여 여러 매퍼와 다중 입력 (0) | 2019.10.02 |
[HADOOP] 하이브 테이블에 새로 추가 된 레코드를 고유 ID 열을 업데이트 (0) | 2019.10.02 |
[HADOOP] HDFS에 다음 수로에 데이터를 작성하고 (0) | 2019.10.02 |
[HADOOP] org.apache.hadoop.hive.ql.metadata.Hive.loadDynamicPartitions 예외 스파크 하이브 분할 테이블을 작성 (2.11) dataframe (0) | 2019.10.02 |