猪帮助:将一个字段拆分成多个字段

时间:2016-03-07 18:42:53

标签: hadoop apache-pig

嗨,我第一次和Pig一起玩,很好奇如何处理将一个字段分成多个其他字段。

我有一个包,A,如下所示:

grunt> Dump A; 

(text, text, Mon Mar 07 12:00:00 CDT 2016)

我想做的是将日期 - 时间字段拆分为多个字段,以便我可以浏览数据集的分布,并在星期,月,年等日进行分组。 / p>

我一直在寻找tokenize,但我不确定这是否符合我的需要,因为我需要/想要将字段名称添加到包中或创建一个嵌套包。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

假设该值已经是数据类型datetime,那么您可以使用以下函数来提取单个元素.Builtin函数参考DateTime Functions in PIG

B = FOREACH A GENERATE f1,f2,
                      GetDay(f3) as f3_Day,
                      GetMonth(f3) as f3_Month,
                      GetYear(f3) as f3_Year,
                      GetHour(f3) as f3_Hour,
                      GetMinute(f3) as f3_Minute,
                      GetSecond(f3) as f3_Second;

如果数据类型为chararray,则使用ToDate()函数将其转换为datetime并提取日期部分。

B = FOREACH A GENERATE f1,f2,ToDate(f3,'choose your datetime format') as f3_Date;
C = FOREACH B GENERATE f1,f2,
                      GetDay(f3_Date) as f3_Day,
                      GetMonth(f3_Date) as f3_Month,
                      GetYear(f3_Date) as f3_Year,
                      GetHour(f3_Date) as f3_Hour,
                      GetMinute(f3_Date) as f3_Minute,
                      GetSecond(f3_Date) as f3_Second;