[HADOOP] PIG는 텍스트 라인을 희소 벡터로 변환
HADOOPPIG는 텍스트 라인을 희소 벡터로 변환
Apache PIG를 사용하여 결합 해야하는 파일이 있어야합니다. 첫 번째 파일에는 책 제목 목록이 포함되어 있습니다. 각 제목은 한 줄에 있습니다.
Ted Dunning, Mahout in Action
Leo Tolstoy, War and Peace
Douglas Adams, The hitchhiker guide to the galaxy.
James Sununu, galaxy III for Dummies
Tom McArthur, The War we went to
두 번째 파일은 단어 및 해당 ID의 목록입니다. 이렇게
ted, 12
tom, 13
douglas, 14
galaxy, 15
war, 16
leo, 17
peace, 18
다음과 같이 출력을 생성하려면이 두 파일을 결합해야합니다.
'Leo Tolstoy, War and peace'라인을 위해
17:1,16:1,18:1
'Tom McArthur, 우리가 간 전쟁'
13:1,16:1
즉, 단어를 키로 사용하여 조인을 수행해야합니다. 지금까지 돼지로 다음 코드를 작성했습니다.
titles = LOAD 'Titles' AS ( title : chararray );
termIDs = LOAD 'TermIDs' AS ( term:chararray,id:int);
A = SAMPLE titles 0.01;
X = FOREACH A GENERATE STRSPLIT(title,'[ _\\[\\]\\/,\\.\\(\\)]+');
이렇게하면 파일이로드되고 X에는 해당 줄에서 발생하는 용어가 포함 된 각 가방 목록이 포함됩니다. 이처럼 :
((ted,dunning,mahout,in,action))
((leo,tolstoy,war,and,peace))
토요일 밤에 늦었 기 때문에 UDF를 작성하거나 스트리밍을 사용하지 않고 단계에 참여하는 방법을 알 수 없습니다. PIG 프리미티브 만 사용하는 것이 가능합니까?
해결법
-
==============================
1.TOKENIZE의 결과를 FLATTEN 할 수 있으므로 모든 bag이 행이되고 이제 termsID와 X 관계를 결합 할 수 있습니다.
TOKENIZE의 결과를 FLATTEN 할 수 있으므로 모든 bag이 행이되고 이제 termsID와 X 관계를 결합 할 수 있습니다.
X = foreach A generate title, flatten(TOKENIZE(title)) as term; J = join X by (term), termIDs by (term); G = group J by title; Result = foreach G generate group as title, termIDs.id;
위의 코드는 휴대 전화에 입력되었으므로 디버깅되지 않았습니다.
업데이트 1 :
TOKENIZE 대신 STRSPLIT를 사용하는 것이 바람직한 경우에는 FLATTEN과 TOBAG를 함께 사용하여 STRSPLIT에서 리턴 한 튜플에서 단어를 가져 오는 TOKENIZE와 동일한 효과를 얻을 수 있습니다.
SPLT = foreach A generate title, FLATTEN(STRSPLIT(title,'[ _\\[\\]\\/,\\.\\(\\)]+')); X_tmp = foreach SPLT generate $0 as title, FLATTEN(TOBAG($1..$20)) as term; -- pivots the row X = filter X_tmp by term is not null; -- this removes the extra bag rows when title was split in less than 20 terms J = join X by (term), termIDs by (term) using 'replicated'; G = group J by title; Result = foreach G generate group as title, termIDs.id;
제목이 20 개를 초과하면 TOBAG의 수를 늘리십시오.
from https://stackoverflow.com/questions/12549842/pig-convert-text-lines-to-sparse-vector by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 하둡 직업이 스스로 죽일 수있는 방법 (0) | 2019.08.11 |
---|---|
[HADOOP] hadoop mapreduce를 사용하여 중복 제거를위한 키 값 쌍 결정 (0) | 2019.08.11 |
[HADOOP] 하나의 테이블에서 select를 실행할 때 전체 데이터베이스를 잠급니다. (0) | 2019.08.11 |
[HADOOP] Sqoop을 통해 여러 소스에서 데이터를 가져 오는 방법 (0) | 2019.08.11 |
[HADOOP] Hadoop의 예제 작업을 실행하는 동안 ClassNotFoundException (0) | 2019.08.11 |