将char数组转换为Date并在Pig中添加持续时间

时间:2014-04-03 07:47:56

标签: apache-pig datetime-format

我是Pig的新手,我有一个500 KB的样本测试数据,我需要多次乘以使文件大小更大以用于某些测试目的。我的数据中的单行如下:

(   card_description:chararray,
    transaction_date:chararray,
    merchant_name:chararray,
    merchant_city:chararray,
    transaction_amount:float
 ) ;

我想简单地多次更改每行的transaction_amounttransaction_date,然后将所有结果合并为一个大文件。
我一直试图改变transaction_date 文件中的日期值为

  

27/05/2010 00:00

r1 = FOREACH data GENERATE card_description,ToDate(transaction_date),merchant_name,merchant_city,
                                  ROUND(RANDOM()*5)*transaction_amount;

result =union data,r1;

为了更改交易日期,我想使用AddDuration功能,但在尝试将chararray转换为date时,我面临与格式相关的问题,无法理解解决方案。

有人可以指导吗?

1 个答案:

答案 0 :(得分:2)

在查看调用ToDate的方式后,您当前正在调用ToDate

ToDate(milliseconds)
ToDate(iosstring)

您的格式不是以毫秒为单位,也不是ISO 8601 format。您应该像以下一样调用它:

ToDate(userstring, format)

formatthese rules后的模式字符串。

因此,ToDate应该被称为:

-- For a 12hr clock
ToDate(transaction_date, "yyyy/MM/dd hh:mm")

-- For a 24hr clock
ToDate(transaction_date, "yyyy/MM/dd HH:mm")

对于AddDuration,请记住您提供给它的第二个参数必须是ISO 8601 format中的字符串。请务必阅读链接,以便正确格式化字符串。