나는 PIG 스크립트를 실행하고 있는데, 이는 모두 FOREACH ... GENERATE FLATTEN(...)
행에 도달 할 때까지 매우 빠르게 진행됩니다.PIG 라틴어 문장이 매우 느림
해당 줄이 너무 느리게 실행되어야하는 이유가 있습니까?
extended = FOREACH kRecords GENERATE *, NORMALIZE(query) AS query_norm:chararray;
-- DESCRIBE extended;
-- extended: {query: chararray,url: chararray,query_norm: chararray}
-- GROUP by both query and url
grouped = GROUP extended BY (query_norm, url);
-- DESCRIBE grouped;
-- grouped: {group: (query_norm: chararray,url: chararray),extended: {(query: chararray,url: chararray,query_norm: chararray)}}
-- Remove multiple items per record (but at the expense of duplicating records)
-- THE LINE BELOW IS THE SLOW ONE!!!
flattened = FOREACH grouped GENERATE FLATTEN(extended.query_norm), FLATTEN(extended.url);
-- THE LINE ABOVE IS THE SLOW ONE!!!
-- Remove duplicates
result = DISTINCT flattened;
덕분에, 베리
이 평평하게 (...) 연산자를 함께 사용
OK, 따라서 마지막 두 PIG 라인의 더 나은 해결책은 'result = FOREACH grouped GENERATE group.query_norm, group.url;'으로 바꾸는 것입니다. 그러나 이것은 FLATTEN이 왜 그렇게 느린 지 설명하지 못합니다! – barryred