두 봉지 사이의 최소 중심을 계산하려고하는 돼지 프로그램이 있습니다. 작동시키기 위해서, 가방을 하나의 데이터 세트로 묶어야한다는 것을 알았습니다. 전체 작업에는 오랜 시간이 걸립니다. 기본적으로Yahoo PigLatin UDF 내에서 파일을 DataBag에로드하려면 어떻게해야합니까?
# **** Load files for iteration ****
register myudfs.jar;
wordcounts = LOAD 'input/wordcounts.txt' USING PigStorage('\t') AS (PatentNumber:chararray, word:chararray, frequency:double);
centerassignments = load 'input/centerassignments/part-*' USING PigStorage('\t') AS (PatentNumber: chararray, oldCenter: chararray, newCenter: chararray);
kcenters = LOAD 'input/kcenters/part-*' USING PigStorage('\t') AS (CenterID:chararray, word:chararray, frequency:double);
kcentersa1 = CROSS centerassignments, kcenters;
kcentersa = FOREACH kcentersa1 GENERATE centerassignments::PatentNumber as PatentNumber, kcenters::CenterID as CenterID, kcenters::word as word, kcenters::frequency as frequency;
#***** Assign to nearest k-mean *******
assignpre1 = COGROUP wordcounts by PatentNumber, kcentersa by PatentNumber;
assignwork2 = FOREACH assignpre1 GENERATE group as PatentNumber, myudfs.kmeans(wordcounts, kcentersa) as CenterID;
: 나도 열어 UDF 내 디스크에서 가방 하나, 또는 COGROUP 필요없이 UDF에 다른 관계를 통과 할 수 있도록 ......
코드에 원하는 내 문제는 각 특허에 대해 하위 관계 (단어 수, kcenters)를 전달해야한다는 것입니다. 이렇게하기 위해서, 나는 PatentNumber, {wordcounts}, {kcenters}를 얻기 위해 PatentNumber에 의해 십자가를 그리고 COGROUP을 수행했다. 관계를 전달하거나 UDF 내에서 센터를 여는 방법을 파악할 수 있다면 PatentNumber를 통해 GROUP 단어 수를 계산하고 myudfs.kmeans (단어 수)를 실행하면 CROSS/COGROUP없이 훨씬 빠를 것입니다.
이것은 값 비싼 작업입니다. 현재 이것은 약 20 분이 소요되며 CPU/RAM을 압박하는 것처럼 보입니다. 나는 그것이 CROSS없이 더 효율적일지도 모른다고 생각하고있었습니다. 나는 그것이 더 빠를 것이라고 확신하지 못하기 때문에 실험하고 싶습니다.
어쨌든 Pig에서로드 기능을 호출하는 것은 evalfunc에서 가져 오지 않은 PigContext 객체가 필요합니다. 그리고 hadoop 파일 시스템을 사용하기 위해서는 몇 가지 초기 객체가 필요합니다. 나는 얻는 방법을 알지 못합니다. 그래서 내 질문에 어떻게 PIG UDF 내에서 hadoop 파일 시스템에서 파일을 열 수 있습니까? 또한 디버깅을 위해 main을 통해 UDF를 실행합니다. 그래서 디버그 모드에서 일반 파일 시스템에서로드해야합니다.
CROSS/COGROUP 없이도 관계를 UDF에 전달할 수있는 방법이 있다면 더 좋은 아이디어입니다. 이것은 관계가 메모리에 상주하는 경우 이상적입니다. 즉, kcenters가있는 CROSS/COGROUP을 필요로하지 않고 myudfs.kmeans (단어 수, kcenters)를 수행 할 수 있습니다 ...
하지만 기본적인 아이디어는 IO를 교환하는 것입니다. RAM/CPU주기.
어쨌든 도움이 될 것입니다, PIG UDF는 UDF 설명서에서도 가장 간단한 것 이상으로 잘 문서화되어 있지 않습니다.
+1 좋은 질문 목록을 이메일을 보내 주시기 바랍니다! 너 무슨 일 했니? 아직도 nosql 작업 중이십니까? –