猪拉丁语 - 左填充零

时间:2015-01-30 21:53:18

标签: format apache-pig

如何在Pig Lagin

中留下零号码

我在3个字段中有年,月和日期,我想从中创建YYYY-MM-DD格式。我在Formatting Date in Generate Statement中看到我可以使用CONCAT以YYYY-MM-DD格式获取,但是月份和日期<10不会留下零填充

因此,而不是2014-01-01,我得到了2014-1-1。

1 个答案:

答案 0 :(得分:0)

您可以通过3种方式解决此问题 的选项1: 如果您安装了pig 0.14 version,请尝试使用此方法

<强>输入

2014    11      12
2013    01      02
2012    12      3
2011    5       24
2010    1       1

<强> PigScript:

A = LOAD 'input' USING PigStorage() AS(year:int,month:int,date:int);
B = FOREACH A GENERATE SPRINTF('%04d-%02d-%02d',year,month,date) AS (finaldate:chararray);
DUMP B;

<强>输出:

(2014-11-12)
(2013-01-02)
(2012-12-03)
(2011-05-24)
(2010-01-01)

<强>参考: http://pig.apache.org/docs/r0.14.0/func.html#sprintf

选项2:猪版本0.13或更低(使用自定义UDF)

<强> PigScript:

REGISTER leftformat.jar;
A = LOAD 'input' USING PigStorage() AS(year:chararray,month:chararray,date:chararray);
B = FOREACH A GENERATE CONCAT(year,'-',CONCAT(month,'-',date)) AS finalDate;
C = FOREACH B GENERATE format.LEFTFORMAT(finalDate);
DUMP C;

<强>输出:

(2014-11-12)
(2013-01-02)
(2012-12-03)
(2011-05-24)
(2010-01-01)

<强> LEFTFORMAT.java

package format;
import java.io.IOException;
import org.apache.commons.lang.StringUtils;
import org.apache.pig.EvalFunc;
import org.apache.pig.data.Tuple;

public class LEFTFORMAT extends EvalFunc<String> {
@Override
public String exec(Tuple arg0) throws IOException {
       try
        {
            String input = ((String) arg0.get(0));
            String year = input.split("-")[0];
            String month = input.split("-")[1];
            String date = input.split("-")[2];
            return (StringUtils.leftPad(year, 4, "0")+"-"+StringUtils.leftPad(month, 2, "0")+"-"+StringUtils.leftPad(date, 2, "0"));
        }
        catch(Exception e)
        {
            throw new IOException("Caught exception while processing the input row ", e);
        }
    }
}

<强>参考:
Left padding a string in pig
这将帮助您编译,构建jar和链接到pig脚本。

<强>选项3:
您可以使用以下任何支持的格式

ToString(Todate(<CONCAT your inputs>,<supportedFormat>))

检查以下链接中支持的格式 Human readable String date converted to date using Pig?