用UDF编程猪

时间:2014-07-06 11:09:43

标签: 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

是否有可用的内置功能? 我是否需要创建一个UDF来单独提取月份?

2 个答案:

答案 0 :(得分:0)

您可以使用子字符串

提取月份
Substring(mydate,0,3)

答案 1 :(得分:0)

这可以通过内置功能或流媒体来完成。

内置功能

在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)

流式传输(bash)

创建一个名为“get_month.sh”的bash脚本

如果您使用的是Mac,内容应该是这样的:

while read line
do
    echo "date -jf %m/%d/%Y ${line} +%b" | bash
done 

或者根据不同的* nix系统相应地更改回波线。

此bash脚本将从标准输入中取出日期并将其转换为月份

在猪脚本中使用它,只需使用:

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)

猪非常灵活,这就是我爱猪的原因!