2017-03-10 5 views
0

나는 아래의 테스트 데이터를 가지고 있습니다.돼지의 칼럼을 가로 지르는 필드의 합

A B C 

M O 

M M M 

M M M 

N  O 

P  N 

I은 ​​M = 7, N = 2, O = 2, P = 1 등, 각 값의 카운트를 얻고 자하는 것이다. 여기서 A, B 및 C는 열 제목입니다. 아래 코드를 작성했습니다.

test= LOAD 'testdata' USING PigStorage(',') as(A:chararray,B:chararray,C:chararray); 
values = FOREACH test GENERATE A==''?'null':(A is null?'null':A)) as A,(B==''?'null':(B is null?'null':B)) as B,(C==''?'null':(C is null?'null':C)) as C; 
grp = GROUP values ALL; 
A = FOREACH grp { 
B =FILTER test.A=='M' OR test.B=='M' OR test.C=='M'; 
C =FILTER test.A=='N' OR test.B=='N' OR test.C=='N'; 
D =FILTER test.A=='O' OR test.B=='O' OR test.C=='O'; 
E =FILTER test.A=='P' OR test.B=='P' OR test.C=='P'; 
GENERATE group, COUNT(B), COUNT(C),COUNT(D),COUNT(E); 
    }; 

"출력에 스칼라에 둘 이상의 행이 있습니다."라는 오류가 나타납니다. 모든 입력이 도움이 될 것입니다 !!

답변

1

부하 라인으로의 데이터는, 필드를 토큰 화하고 I 여러 분야 걸쳐 COUNT 얻을하고자

A = load 'testdata' as (line:chararray); 
B = foreach A generate flatten(TOKENIZE((chararray)line)) as word; 
C = group B by word; 
D = foreach C generate group,COUNT(B); 
DUMP D; 
+0

카운트 (A : chararray, B : chararray, C : chararray 참조). 위에 언급 한 것처럼 1 필드가 아닙니다. –

+0

스크립트를 실행 한 적이 있습니까? 단어별로 그룹화하면 각각의 고유 한 문자가 그룹화되고 각 문자에 대한 개수가 제공됩니다. –

+0

그게 효과가있다. 필자는 '라인'을 단일 필드로 간주하여 토큰 화 chararray의 병합을 실현하지 않았습니다. –