在 PIG Latin 中将字符串转换为长整型
Convert String to Long in PIG Latin
我正在用 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。有没有办法从该值中获取日期?
我不确定这是否是最佳模式,但我找到了一种方法。正如您可以从 Pig Latin 调用 java 方法一样,只需调用进行转换的方法:
define getLong InvokeForLong('java.lang.Long.parseLong','String');
rawdata = LOAD '/opt/test.json' USING JsonLoader('var1:chararray,var2:chararray,var3:chararray,timestamp: chararray');
indata = FOREACH rawdata GENERATE var1,var2,var3,ToDate(getLong(timestamp)) as timest;
你得到了正确的结果。
我正在用 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。有没有办法从该值中获取日期?
我不确定这是否是最佳模式,但我找到了一种方法。正如您可以从 Pig Latin 调用 java 方法一样,只需调用进行转换的方法:
define getLong InvokeForLong('java.lang.Long.parseLong','String');
rawdata = LOAD '/opt/test.json' USING JsonLoader('var1:chararray,var2:chararray,var3:chararray,timestamp: chararray');
indata = FOREACH rawdata GENERATE var1,var2,var3,ToDate(getLong(timestamp)) as timest;
你得到了正确的结果。