【问题标题】:Pig Script toDate convertion issue resulting different outputPig 脚本到日期转换问题导致不同的输出
【发布时间】:2017-05-24 11:18:26
【问题描述】:

如何使用 PIG 转换日期和时间?我正在尝试转换不转换为 24 小时格式输入值

30/06/2016 02:43:23 PM 01/12/2016 12:43:23 AM

通过ToDate($0,'dd/MM/yyyy hh:mm:ss aa')后 结果是

30/06/2016 02:43:23.324+05:30 01/12/2016 12:43:23+05:30

但期望结果为

30/06/2016 14:43:23 01/12/2016 12:43:23

谁能帮我解决这个问题

【问题讨论】:

    标签: apache-pig bigdata


    【解决方案1】:

    参考: http://pig.apache.org/docs/r0.12.0/func.html#to-date ToDate 的返回类型是 DateTime 对象。

    要将 chararray 日期转换为任何其他格式,则必须在获取 DateTime 对象后使用 ToString() 函数。

    输入:a.csv

    30/06/2016 02:43:23 PM
    01/12/2016 12:43:23 AM
    

    猪脚本:

    adataset = LOAD 'a.csv' USING PigStorage(',') AS (display_date:chararray);
    req = FOREACH adataset GENERATE ToString(ToDate(display_date,'dd/MM/yyyy hh:mm:ss a'),'yyyy/MM/dd HH:mm:ss'); 
    DUMP req;
    

    【讨论】:

    • Murali 非常感谢您的帮助....它工作得很好!!!!!!是否可以将日期时间(如 30/06/16 02:43:23 PM 01/12/17 12:43:23 AM)转换为 (30/06/2016 14:43:23) (01/12/2016 00: 43:23)
    • @dass :您必须相应地指定格式,检查 - docs.oracle.com/javase/6/docs/api/java/text/… 以了解如何指定格式。对于您的示例 dd/MM/yy 应该可以工作。
    • 我必须分别获取日期、年、月和分钟、秒、小时以需要更改日期时间的格式 yyyy-mm-dd hh:mm:ss,我已经完成拆分字符串 get哪个进入其他关系???是否可以执行相同的生成语句。请在下面的评论中找到我想要做的相同代码
    • 完成 = foreach tmp { 日期 = ToDate($8,'MM/dd/yyyy HH:mm:ss');年份 = (chararray)ABS(GetYear(date));月 = (chararray)ABS(GetMonth(date)); day = (chararray)ABS(GetDay(date));小时 = (chararray)ABS(GetHour(date)); min = (chararray)ABS(GetMinute(date)); sec = (chararray)ABS(GetSecond(date));生成 $0,CONCAT(CONCAT(CONCAT(CONCAT(year, '-'), CONCAT(month, '-')),day),CONCAT(' ',CONCAT(CONCAT(CONCAT(hour, ':'), CONCAT (min, ':')),sec))),,$33,$22,$2,$3,$17,$18,$21; }
    • @dass :如果需要 - 作为分隔符,然后以 ToString 方法的格式指定相同的分隔符。检查更新的答案。
    猜你喜欢
    • 2021-12-14
    • 1970-01-01
    • 2019-11-24
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 2023-02-15
    • 1970-01-01
    相关资源
    最近更新 更多