нет. записей за десятилетний период у свиньи - PullRequest
0 голосов
/ 14 января 2020

У меня есть такие данные

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

Мне нужно узнать нет. записей за десятилетний период с использованием пиглатина. не знаю начальный и конечный год, так как данные не отсортированы

Я попробовал следующий код:

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.when я описываю C он показывает

C: {year1: datetime}
grunt> 

1 Ответ

0 голосов
/ 29 февраля 2020

Вы уверены, что формат 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):
...