[HADOOP] 아파치 돼지를 사용하여 파일에서 "문자열 식"을 제거하는 절차 / 코드 무엇을 할 수 있습니까?
HADOOP아파치 돼지를 사용하여 파일에서 "문자열 식"을 제거하는 절차 / 코드 무엇을 할 수 있습니까?
A = load '/home/wrdtest.txt';
B = foreach A generate flatten(TOKENIZE((chararray)$0)) as word;
C = filter B by word != 'the';
D = group C by word;
E = foreach D generate COUNT(C) as count, group as word;
F = order E by count desc;
store F into '/tmp/sample_data20';
난 그냥 텍스트를 필터링 할. 제 3 단계는 텍스트를 필터링하고 '를'텍스트에서 파일을 제거합니다. 하지만 난 텍스트에서 499 개 단어 (중지 단어)의 집합을 제거 할. 내가 사용하려고 '|' 같은 (또는) :
C = filter B by word != 'the|and|or'...but it didnt work.
정지 단어를 제거하기 위해이에 제안시겠습니까와 나는 (stopwords.txt) 같은 텍스트 파일을 포함 할 수있다.
나는 돼지의 순진한 사용자입니다
해결법
-
==============================
1.중지 단어 제거와 같은 뭔가가 내장 함수에 될 수 없습니다만큼 복잡하다. 당신은 할 매우 간단합니다 사용자 정의 함수를 작성해야합니다.
중지 단어 제거와 같은 뭔가가 내장 함수에 될 수 없습니다만큼 복잡하다. 당신은 할 매우 간단합니다 사용자 정의 함수를 작성해야합니다.
-- load the data line by line lines = LOAD 'datafile.txt' USING TextLoader() AS (line:chararray); -- apply some sort of UDF that returns the exact line without the stop words nostop = FOREACH lines GENERATE myudfs.removestop(line); -- store the data out STORE nonstop INTO 'datafile_nostop.txt';
작업 밖으로 당신의 목록을 추진하는 것은 또 다른 이야기입니다. 목록 수천의 순서로, 상대적으로 작은 경우, 당신은 그것을 사용할 수 있습니다 있도록 (즉, 목록을 하드 코딩) 코드에 정지 단어를 구울 수 있습니다. 그렇지 않으면, 당신은 파일을 밀어 분산 캐시를 사용할 수 있습니다.
당신이 제공 한 추가 정보와 함께, 나는 다른 방법을 제안 할 수 있습니다. UDF를 사용하여 내 위의 접근 방식은, 그래도 여전히 유효합니다.
이 새로운 접근 방식은 다음 효과적으로 목록과 일치하는 것들을 제거하는 방지에 가입하고, 다른 파일을로드 포함 할 것이다. 당신은 확실히 stopwords.txt이 작동하지 위해 한 줄에 하나의 단어를 가지고 확인해야합니다. 할 수있는 안티 조인, 내가 할 수 있습니다 (즉, 가지 다른 목록과 일치하지 않는 목록을 유지) 왼쪽 외부 (복제 사용) 중지 단어 열이 null이고, 다음 (필터링에 가입 즉, 그것은 일치 정지 단어를)하지 않았다.
A = load '/home/wrdtest.txt'; -- load the stop words list SW = load '/home/stopwords.txt' as (stopword:chararray); B = foreach A generate flatten(TOKENIZE((chararray)$0)) as word; -- join the data with a left outer join -- using replicated should be done with the right relation (SW) is small SW2 = join B by word LEFT OUTER, SW by stopword USING 'replicated'; -- filter out where the stopword is null, meaning it is not in the stopword list C = filter SW2 by stopword IS NULL; -- remove the stopword column that we don't need. C = foreach C generate word; D = group C by word; E = foreach D generate COUNT(C) as count, group as word; F = order E by count desc; store F into '/tmp/sample_data20';
-
==============================
2.나는 도널드 광부에 의해 위의 솔루션을 사용했다.
나는 도널드 광부에 의해 위의 솔루션을 사용했다.
다음과 같은 부분을 가입에 대해 내가 관계를 수정
SW2 = join B by word LEFT, SW by stopword;
나를 위해 작동합니다.
from https://stackoverflow.com/questions/8819440/what-can-be-the-procedure-code-to-remove-string-expression-from-a-file-using-a by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] HDFS에서 이동 데이터는 하이브 테이블에로드 작업을 수행하는 방법에 대한 디렉토리를 하이브 (0) | 2019.10.09 |
---|---|
[HADOOP] AWS 잘못된 요청 (400) 스파크 (0) | 2019.10.09 |
[HADOOP] 테이블을 나열 할 때 HBase를 쉘은 오류를 보여줍니다 (0) | 2019.10.09 |
[HADOOP] 어떻게 하둡 입력 텍스트 파일에 대한 레코드 구분 기호로 탭을 지정하려면? (0) | 2019.10.09 |
[HADOOP] 어떻게 커버 로스 키 탭에 R을 통해 HIVE와 연결? (0) | 2019.10.09 |