我在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。有没有办法从该值获得日期?
答案 0 :(得分:2)
我不确定这是否是最佳模式,但我找到了一种方法。您可以从Pig Latin调用java方法,只需调用进行转换的方法:
lower_lim = 0
upper_lim = 1
X = unifrnd(lower_lim,upper_lim,100,2)
Y = myfun(X)
你得到了正确的结果。