【问题标题】:Convert String to Long in PIG Latin在 PIG 拉丁语中将字符串转换为长整型
【发布时间】:2015-11-26 11:14:24
【问题描述】:

我正在用 Pig Latin 编写一个脚本,该脚本将在 PIG 0.15.0 中通过 Hadoop 2.7.1 运行,该脚本获取 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。有没有办法从该值中获取日期?

【问题讨论】:

    标签: json hadoop apache-pig


    【解决方案1】:

    我不确定这是否是最佳模式,但我找到了一种方法。正如您可以从 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的一个特性,应该多宣传。
    猜你喜欢
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多