Pig每十年的记录数

qf9go6mv  于 2021-06-24  发布在  Pig
关注(0)|答案(1)|浏览(362)

我有这样的数据

name, id, nametype,recclass,mass, fall, year,

Aachen,1, Valid,    L5,      21,  Fell, 01/01/1880 12:00:00 AM,

Aarhus,2, Valid,    H6,      720  Fell, 01/01/1951 12:00:00 AM

 :     :

 :     :

 :    45700

我必须找出每十年使用piglatin的录音数量。不知道起始和结束年份,因为数据未排序
我尝试了以下代码:

nasadata = load 'Meteorite_Landings.csv' using PigStorage(',') as(name:chararray,id:int,nametype:chararray,recclass:chararray,mass:int,fall:chararray,year:chararray);

B = FOREACH nasadata  GENERATE year;

C = FOREACH B GENERATE ToDate(year,'dd-MM-YYYY') as year1;

当我转储c时,它显示无法从输入文件中读取数据。但当我转储nasadata时,它工作了。当我描述c时,它显示

C: {year1: datetime}
grunt>
gcuhipw9

gcuhipw91#

您确定todate格式正确吗?因为“01/01/1880 12:00:00 am”没有“dd-mm-yyyy”格式,但是“01-01-1880”会。
您可以尝试格式化日期或使用 STRSPLIT(STRSPLIT(year, ' ').$0, '/').$2 提取年份。然后用 (INT)STRSPLIT(STRSPLIT(year, ' ').$0, '/').$2 . 然后你就可以用这样的方法把一年的时间四舍五入到最接近的十年。

A = FOREACH data GENERATE (INT)STRSPLIT(STRSPLIT(year, ' ').$0, '/').$2 AS year;
B = FOREACH A GENERATE (year - (year % 10)) AS year_rounded;
C = GROUP B BY year_rounded;
D = FOREACH C GENERATE group, COUNT(C):

相关问题