tutorial spark script pig hadoop apache-pig

hadoop - spark - pig script



seleccione conteo distinto usando cerdo latino (2)

Necesito ayuda con este script de cerdo. Solo estoy obteniendo un solo registro. Estoy seleccionando 2 columnas y haciendo un conteo (distinto) en otro mientras también uso una cláusula where like para encontrar una descripción particular (desc).

Aquí está mi sql con cerdo, estoy tratando de codificar.

/* 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;


Puede definir mejor esto como una macro:

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); }

Uso:

X = LOAD ''data'' AS (x: int);

Y = DISTINCT_COUNT(X, x);

Si necesita usarlo en FOREACH entonces la forma más fácil es algo como:

...GENERATE COUNT(Distinct(x))...

Probado en Pig 12.


Podría agrupar en cada dominio y luego contar el número de elementos distintos en cada grupo con una sintaxis FOREACH anidada :

D = group C by domain; E = foreach D { unique_segments = DISTINCT C.segment; generate group, COUNT(unique_segments) as segment_cnt; };