【问题标题】:Loading datetime format files using PIG使用 PIG 加载日期时间格式文件
【发布时间】:2016-03-03 08:51:30
【问题描述】:

我有以下方式的数据集。

ravi,savings,avinash,2,char,33,F,22,44,12,13,33,44,22,11,10,22,2006-01-23
avinash,current,sandeep,3,char,44,M,33,11,10,12,33,22,39,12,23,19,2001-02-12
supreeth,savings,prabhash,4,char,55,F,22,12,23,12,44,56,7,88,34,23,1995-03-11
lavi,current,nirmesh,5,char,33,M,11,10,33,34,56,78,54,23,445,66,1999-06-15
Venkat,savings,bunny,6,char,11,F,99,12,34,55,33,23,45,66,23,23,2016-05-18

最后一列(例如:2006-01-23)是日期。 我正在尝试使用 PIG 使用以下命令加载上述数据。 以下是我用来加载文件的代码。

file = LOAD 'FI_USER_CREDS_TBL_T.txt' 
       USING PigStorage(',') AS (USER_ID:chararray,
                                 ROLE_ID:chararray,
                                 USER_PW:chararray,
                                 NUM_PWD_HISTORY:int,
                                 PWD_HISTORY:chararray,                                     
                                 PWD_LAST_MOD_TIME:int,
                                 NUM_PWD_ATTEMPTS:int,
                                 NEW_USER_FLG:chararray,
                                 LOGIN_TIME_LOW:int,
                                 LOGIN_TIME_HIGH:int,
                                 DISABLED_FROM_DATE:int,
                                 DISABLED_UPTO_DATE:int,
                                 PW_EXPY_DATE:int,
                                 ACCT_EXPY_DATE:int,
                                 ACCT_INACTIVE_DAYS:int,                                     
                                 LAST_ACCESS_TIME:int,
                                 TS_CNT:int,
                                 DTL__CAPXTIMESTAMP:int,
                                 ETL_INSERT_DATE:datetime);

但它没有读取日期列,而是在使用转储文件命令后给出以下输出。

(ravi,savings,avinash,2,char,33,,22,44,12,13,33,44,22,11,10,22,,)
(avinash,current,sandeep,3,char,44,,33,11,10,12,33,22,39,12,23,19,,)
(supreeth,savings,prabhash,4,char,55,,22,12,23,12,44,56,7,88,34,23,,)
(lavi,current,nirmesh,5,char,33,,11,10,33,34,56,78,54,23,445,66,,)
(Venkat,savings,bunny,6,char,11,,99,12,34,55,33,23,45,66,23,23,,)

我如何阅读日期列。

请在这方面帮助我。

谢谢。

【问题讨论】:

    标签: hadoop mapreduce apache-pig hdfs


    【解决方案1】:

    将日期加载为chararray,然后转换为日期格式

    喜欢:

    file2 = FOREACH 文件 GENERATE ToDate(date, 'dd/MM/yyyy') AS date,....

    试试这个链接作为参考, http://pig.apache.org/docs/r0.11.0/api/org/apache/pig/builtin/ToDate.html 或者 http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

    【讨论】:

    • 即使我将数据类型指定为 chararray 然后转储它.....它给出了类似的输出
    【解决方案2】:

    将数据加载为 chararray。

    file = LOAD 'FI_USER_CREDS_TBL_T.txt' USING PigStorage(',') AS (USER_ID:chararray,ROLE_ID:chararray,USER_PW:chararray,NUM_PWD_HISTORY:int,PWD_HISTORY:chararray,PWD_LAST_MOD_TIME:int,NUM_PWD_ATTEMPTS:int,NEW_USER_FLG: chararray,LOGIN_TIME_LOW:int,LOGIN_TIME_HIGH:int,DISABLED_FROM_DATE:int,DISABLED_UPTO_DATE:int,PW_EXPY_DATE:int,ACCT_EXPY_DATE:int,ACCT_INACTIVE_DAYS:int,LAST_ACCESS_TIME:int,TS_CNT:int,DTL__CAPXTIMESTAMP:int,ETL_INSERT_DATE:chararray);

    --ToDate内置函数用于转换为日期时间,需要指定格式

    文件2 = FOREACH文件GENERATE USER_ID,ROLE_ID,USER_PW,NUM_PWD_HISTORY,PWD_HISTORY,PWD_LAST_MOD_TIME,NUM_PWD_ATTEMPTS,NEW_USER_FLG,LOGIN_TIME_LOW,LOGIN_TIME_HIGH,DISABLED_FROM_DATE,DISABLED_UPTO_DATE,PW_EXPY_DATE,ACCT_EXPY_DATE,ACCT_INACTIVE_DAYS,LAST_ACCESS_TIME,TS_CNT,DTL__CAPXTIMESTAMP,TODATE(ETL_INSERT_DATE,“YYYY -MM-dd') AS ETL_INSERT_DATE;

    描述文件2; 转储文件2;

    【讨论】:

    • 嗨,amrutha,我仍然以同样的方式获得输出......它对你有用吗?
    • 是的。它对我有用。样本输出:(A,A,A,1,A,1,1,A,1,1,1,1,1,1,1,1,1,1,2016-03-03T00:00:00.000+ 05:30)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 2011-12-27
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多