Apache pig 用UDF编程Pig

Apache pig 用UDF编程Pig,apache-pig,Apache Pig,我有一个日期作为Pig中的Chararray数据类型 我需要用文字记录那个日期的月份 以下文件仅包含日期 06/28/2014 08/28/2014 09/17/2014 10/10/2014 它的加载方式如下: myinput = LOAD 'file' AS(mydate:chararray); 我需要输出为 Jun Aug Sep Oct 是否有任何内置功能可用于此? 是否需要创建一个自定义项来单独提取月份?您可以使用子字符串提取月份 Substring(mydate,0,3) 这

我有一个日期作为Pig中的Chararray数据类型

我需要用文字记录那个日期的月份

以下文件仅包含日期

06/28/2014
08/28/2014
09/17/2014
10/10/2014
它的加载方式如下:

myinput = LOAD 'file' AS(mydate:chararray);
我需要输出为

Jun
Aug
Sep
Oct
是否有任何内置功能可用于此?
是否需要创建一个自定义项来单独提取月份?

您可以使用子字符串提取月份

Substring(mydate,0,3)

这可以通过内置函数或流来完成

内置函数 在pig 0.12中,有ToDate函数来生成时间对象

data = LOAD './code/pig/data/date.txt' AS (d:chararray); 
month = foreach data GENERATE ToString(ToDate(d, 'MM/dd/yyyy'), 'MMM') AS month_abbr; 
DUMP month;
输出如下所示:

(Jun)
(Aug)
(Sep)
(Oct)
(Jun)
(Aug)
(Sep)
(Oct)
流媒体bash 创建一个名为“get_month.sh”的bash脚本

如果您使用Mac,则内容应如下所示:

while read line
do
    echo "date -jf %m/%d/%Y ${line} +%b" | bash
done 
或者针对不同的*nix系统相应地更改回显线路

这个bash脚本将从标准输入中获取日期,并将其转换为月份

要在pig脚本中使用它,只需使用:

data = LOAD './code/pig/data/date.txt' AS (d:chararray);
month= STREAM data THROUGH `./get_month.sh` AS (month_abbr:chararray);
DUMP month;
输出如下所示:

(Jun)
(Aug)
(Sep)
(Oct)
(Jun)
(Aug)
(Sep)
(Oct)
猪是非常灵活的,这就是为什么我喜欢猪