用于从给定的csv文件创建IDxCITY矩阵的PIG脚本

时间:2015-03-20 13:51:33

标签: apache-pig flatten

我有一个输入文件,包括ID,CITY和Count信息,如下所示,我想创建一个csv文件,其中包含每个CITY的ID和计数。计数将被写为' 0'如果ID没有与CITY一起观看。我尝试使用group by,cogroup和flatten生成一个pig脚本,但无法使它提供此样本输出。

我怎样才能为此编写猪脚本?

INPUT(ID,市,COUNT):

00004589,IZMIR,2
00005275,KOCAELI,1
00005275,ISTANBUL,1
00008523,ESKISEHIR,2

输出:

ID,IZMIR,ISTANBUL,ESKISEHIR,KOCAELI
00004589,2,0,0,0
00005275,0,1,0,1
00008523,0,0,2,0

1 个答案:

答案 0 :(得分:0)

您可以使用以下脚本创建矩阵:

DATA = load' /tmp/data.csv'使用PigStorage(',')为(ID:chararray,CITY:chararray,COUNT:chararray);

ESKISEHIR =过滤数据(CITY匹配' ESKISEHIR');

ISTANBUL =过滤数据(城市匹配'伊斯坦布尔');

IZMIR =过滤数据(CITY匹配' IZMIR');

KOCAELI =过滤数据(CITY匹配' KOCAELI');

IDLIST = foreach DATA生成$ 0作为ID;

IDLIST =不同的IDLIST;

COGROUPED = cogroup IDLIST $ 0,IZMIR $ 0,ISTANBUL $ 0,ESKISEHIR $ 0,KOCAELI $ 0;

CG_CITY = foreach COGROUPED生成FLATTEN($ 1),FLATTEN((IsEmpty($ 2. $ 2)?{(' 0')}:$ 2. $ 2)),FLATTEN((IsEmpty($ 3. $ 2) )?{(' 0')}:$ 3. $ 2)),FLATTEN((IsEmpty($ 4. $ 2)?{(' 0')}:$ 4. $ 2)), FLATTEN((IsEmpty($ 5. $ 2)?{(' 0')}:$ 5. $ 2));

存储CG_CITY INTO' / tmp / id_city_matrix'使用PigStorage(',');