无法按小时对 DateTime 进行分组或转储结果 Apache Pig

Can't Group DateTime by Hour or Dump Result Apache Pig

我正在从事一个项目,该项目要求我找到多个数据集的时间平均值(例如:小时、天、月),然后对这些平均值进行计算。我 运行 遇到的问题是 Apache Pig 不会按时间分组,也不会转储 DateTime 值。我已经在 Stack Overlflow 和其他地方尝试了几种解决方案 posted,但都无济于事。我也阅读了文档,但无法找到解决方案。

到目前为止,这是我的代码:

data = LOAD 'TestData' USING PigStorage(',');

t_data = foreach data generate (chararray)[=10=] as date, (double)5 as w_top, (double)6 as t_top, (double)0 as w_mid, (double)1 as t_mid, (double)5 as w_bot, (double)6 as t_bot, (double)9 as pressure;

times = FOREACH t_data GENERATE ToDate(date,'YYYY-MM-ddThh:mm:ss.s') as (date), w_top, t_top, w_mid, t_mid, w_bot, t_bot, pressure;



grp_hourly = GROUP times by GetHour(date);

average = foreach grp_hourly generate flatten(group), times.date, AVG(times.w_top), AVG(times.t_top), AVG(times.w_mid), AVG(times.t_mid), AVG(times.w_bot), AVG(times.t_bot);

以及数据中的一些示例行:

2011-01-06 15:00:00.0 ,0.07225,-11.36384,-0.045,-11.24599,0.036,-12.44104,1021.707
2011-01-06 15:00:00.1 ,0.09975,-11.34448,-0.0325,-11.26053,0.041,-12.45392,1021.694
2011-01-06 15:00:00.2 ,0.15375,-11.35576,-0.02975,-11.26536,0.01025,-12.44748,1021.407
2011-01-06 15:00:00.3 ,-0.00225,-11.42034,-0.03775,-11.28477,-0.013,-12.44429,1021.764
2011-01-06 15:00:00.4 ,0.01625,-11.33965,-0.0395,-11.27989,-0.0395,-12.42172,1021.484

我当前得到的输出:

我得到一个文件,其中包含我输入 APACHE Pig 的每个变量的平均值,但没有日期和时间(很可能是整个数据集中每个变量的平均值)。我每小时都需要它们并与输出一起打印。任何提示将不胜感激。抱歉,如果我的 post 很乱,我不会 post 经常使用 Stack Overflow。

ToDate 中的日期和时间模式字符串与您的数据不完全匹配。您有 YYYY-MM-ddThh:mm:ss.s,但您的数据看起来像 2011-01-06 15:00:00.0。您需要匹配数据中的空格,并且由于您的时间是 24 小时制,因此您需要使用 HH 而不是 hh。查看 Java SimpleDateFormat class 的文档。试试这个模式字符串:

times = FOREACH t_data GENERATE ToDate(date,'yyyy-MM-dd HH:mm:ss.s ') as date;

要调试您的代码,请尝试在创建关系 times 之后立即转储,而不是在最后转储,因为看起来问题出在 ToDate().

Savage 的回答是正确的。我在代码中遇到的问题是引号太靠近日期和时间字符串。所以与其这样写我的:

(date,'YYYY-MM-ddThh:mm:ss.s')

应该这样写:

(date,'YYYY-MM-ddThh:mm:ss.s ')