Pig 脚本到日期转换问题导致不同的输出
Posted
技术标签:
【中文标题】Pig 脚本到日期转换问题导致不同的输出【英文标题】:Pig Script toDate convertion issue resulting different output 【发布时间】: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
谁能帮我解决这个问题
【问题讨论】:
【参考方案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 方法的格式指定相同的分隔符。检查更新的答案。以上是关于Pig 脚本到日期转换问题导致不同的输出的主要内容,如果未能解决你的问题,请参考以下文章
Java中从字符串到sql日期的日期转换给出不同的输出? [复制]
Java & Pig - 是不是可以将 pig 脚本的输出转换为 Java 变量?