我有一个输入文件,包括id,城市和计数信息如下,我想创建一个csv文件,其中包括每个城市的id和计数数字。如果城市未监视id,则计数将写入“0”。我试着用groupby、cogroup和flatten生成一个pig脚本,但是无法给出这个示例输出。
我怎样才能写一个Pig脚本呢?
输入(id、城市、计数):
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条答案
按热度按时间ymdaylpp1#
您可以使用以下脚本创建矩阵:
data=load'/tmp/data.csv',使用pigstorage(',')作为(id:chararray,city:chararray,count:chararray);
eskisehir=过滤数据依据(城市匹配“eskisehir”);
伊斯坦布尔=数据筛选依据(城市匹配‘伊斯坦布尔’);
izmir=过滤数据依据(城市匹配“izmir”);
kocaeli=过滤数据依据(城市匹配‘kocaeli’);
idlist=foreach data生成$0作为id;
idlist=不同的idlist;
cogrouped=cogroupidlist乘以0美元,izmir乘以0美元,伊斯坦布尔乘以0美元,eskisehir乘以0美元,kocaeli乘以0美元;
cg\u city=foreach cogrouped generate flatten($1),flatten((isempty($2.$2)?{('0')}:$2.$2)),扁平化((isempty($3.$2)?{('0')}:$3.$2)),扁平化((isempty($4.$2)?{('0')}:$4.$2)),扁平化((isempty($5.$2)?{('0')} : $5.$2));
使用pigstorage(',')将cg_city存储到'/tmp/id_city_matrix';