[HADOOP] 돼지 라틴어를 사용하여 수를 선택하십시오.
HADOOP돼지 라틴어를 사용하여 수를 선택하십시오.
이 돼지 스크립트에 도움이 필요해. 나는 단지 하나의 기록을 얻고있다. 두 칼럼을 선택하고 또 다른 칼럼에서 count (distinct)를하고 where 절을 사용하여 특정 설명 (desc)을 찾습니다.
여기에 코드를 작성하려고하는 돼지가있는 sql이 있습니다.
/*
For example in sql:
select domain, count(distinct(segment)) as segment_cnt
from table
where desc='ABC123'
group by domain
order by segment_count desc;
*/
A = LOAD 'myoutputfile' USING PigStorage('\u0005')
AS (
domain:chararray,
segment:chararray,
desc:chararray
);
B = filter A by (desc=='ABC123');
C = foreach B generate domain, segment;
D = DISTINCT C;
E = group D all;
F = foreach E generate group, COUNT(D) as segment_cnt;
G = order F by segment_cnt DESC;
해결법
-
==============================
1.각 도메인에서 GROUP을 수행 한 다음 중첩 된 FOREACH 구문을 사용하여 각 그룹에서 고유 한 요소의 수를 계산할 수 있습니다.
각 도메인에서 GROUP을 수행 한 다음 중첩 된 FOREACH 구문을 사용하여 각 그룹에서 고유 한 요소의 수를 계산할 수 있습니다.
D = group C by domain; E = foreach D { unique_segments = DISTINCT C.segment; generate group, COUNT(unique_segments) as segment_cnt; };
-
==============================
2.이 매크로를 매크로로 더 잘 정의 할 수 있습니다.
이 매크로를 매크로로 더 잘 정의 할 수 있습니다.
DEFINE DISTINCT_COUNT(A, c) RETURNS dist { temp = FOREACH $A GENERATE $c; dist = DISTINCT temp; groupAll = GROUP dist ALL; $dist = FOREACH groupAll GENERATE COUNT(dist); }
용법:
X = LOAD 'data'AS (x : int);
Y = DISTINCT_COUNT (X, x);
대신 FOREACH에서 사용해야하는 경우 가장 쉬운 방법은 다음과 같습니다.
... GENERATE COUNT (고유 (x)) ...
돼지 12 테스트.
-
==============================
3.당신이 어떤 그룹에 의지하고 싶지 않다면, 당신은 이것을 사용합니다 :
당신이 어떤 그룹에 의지하고 싶지 않다면, 당신은 이것을 사용합니다 :
G = FOREACH (GROUP A ALL){ unique = DISTINCT A.field; GENERATE COUNT(unique) AS ct; };
이것은 단지 당신에게 숫자를 줄 것입니다.
from https://stackoverflow.com/questions/9247296/select-count-distinct-using-pig-latin by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 노드 / hbase가 ZooKeeper에 없습니다. (0) | 2019.07.21 |
---|---|
[HADOOP] hdfs의 파일 경로 (0) | 2019.07.20 |
[HADOOP] 행 HBase의 특정 열 패밀리에서 열 가져 오기 (0) | 2019.07.20 |
[HADOOP] 재배포 후 HBase 보조 프로세서가 업데이트되지 않음 (0) | 2019.07.20 |
[HADOOP] Hive의 JOIN이 MapReduce의 JOIN 유형을 트리거합니까? (0) | 2019.07.20 |