在PIG Latin中将String转换为Long

时间:2015-11-26 11:14:25

标签: json hadoop apache-pig

我在Pig Latin中编写一个脚本,通过Hadoop 2.7.1在PIG 0.15.0中运行,获取JSON消息列表并处理其中的信息。 JSON看起来像这样:

{
    "var1": "xxx",
    "var2": "yyy",
    "var3": "zzz",
    "timestamp": "1448283242297",
}

我使用以下命令加载文件:

rawdata = LOAD '/opt/test.json' USING JsonLoader('var1:chararray,var2:chararray,var3:chararray,timestamp: chararray');

当我尝试使用ToDate函数转换时间戳值时,我得到一个格式错误,因为它正在接收一个字符串,而不是一个Long,所以它期望一个可读的日期。

indata = FOREACH rawdata GENERATE var1,var2,var3,ToDate(timestamp) as timel;


java.lang.IllegalArgumentException: Invalid format: "1448283242297" is malformed at "2297"

我在文档中读到不支持从String转换为Long。有没有办法从该值获得日期?

1 个答案:

答案 0 :(得分:2)

我不确定这是否是最佳模式,但我找到了一种方法。您可以从Pig Latin调用java方法,只需调用进行转换的方法:

lower_lim = 0
upper_lim = 1
X = unifrnd(lower_lim,upper_lim,100,2)
Y = myfun(X)

你得到了正确的结果。