Pig每十年的记录数

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

我有这样的数据

  1. name, id, nametype,recclass,mass, fall, year,
  2. Aachen,1, Valid, L5, 21, Fell, 01/01/1880 12:00:00 AM,
  3. Aarhus,2, Valid, H6, 720 Fell, 01/01/1951 12:00:00 AM
  4. : :
  5. : :
  6. : 45700

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

  1. nasadata = load 'Meteorite_Landings.csv' using PigStorage(',') as(name:chararray,id:int,nametype:chararray,recclass:chararray,mass:int,fall:chararray,year:chararray);
  2. B = FOREACH nasadata GENERATE year;
  3. C = FOREACH B GENERATE ToDate(year,'dd-MM-YYYY') as year1;

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

  1. C: {year1: datetime}
  2. 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 . 然后你就可以用这样的方法把一年的时间四舍五入到最接近的十年。

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

相关问题