【问题标题】:HIVE_BAD_DATA: Error Parsing field value JSONObject cant be cast as IntHIVE_BAD_DATA:解析字段值 JSONObject 时出错,不能转换为 Int
【发布时间】:2021-01-26 18:54:49
【问题描述】:

我正在通过一个 lambda 函数将一个缩小的 JSON 文件上传到 S3,该函数通过 API 调用提取数据并将一些数据保存为 JSON。胶水爬虫然后爬取存储桶并找到一个新的 JSON 文件。爬虫将表添加到数据目录中的数据库中。当我在 Athena 中查询数据库时,我收到以下错误消息。我不确定为什么该字段可能是完整的 JSON 对象而不是 INT 值。以下是我能描述的最好的设置。

任何解决方案或想法将不胜感激。

查询: SELECT * FROM ""."" 限制 10;

错误信息: HIVE_BAD_DATA:错误解析字段值'{'id':1,'name':'some name','is_active':true}'字段0:org.openx.data.jsonserde.json.JSONObject 不能转换为java .lang.整数。

示例文件名: .json 12:00:00.json

示例 JSON(实际已缩小):

[
{'id': 1, 'name': 'some name', 'is_active': true},
{'id': 1, 'name': 'some name', 'is_active': true},
{'id': 1, 'name': 'some name', 'is_active': true}
]

存储桶路径: ////

JSON 分类器: $[*]

【问题讨论】:

    标签: amazon-web-services amazon-s3 hive aws-glue amazon-athena


    【解决方案1】:

    目前无法测试,但我会这样做:

    1. 将单引号 (') 替换为双引号 (") 以将 JSON 文档中的键和字符串值括起来;我不确定 Athena 是否可以读取单引号 JSON。
    2. 从列表中删除每个条目,然后将其视为新行 JSON 文档。例如:

    {"id": 1, "name": "some name", "is_active": true}\n

    {"id": 1, "name": "some name", "is_active": true}\n

    {"id": 1, "name": "some name", "is_active": true}\n

    Obs.:请记住,Athena 无法在同一行中读取多个 JSON 文档。它只读取文本文件每一行的第一次出现。

    1. 检查是否存在错误或未转义的引号

    【讨论】:

    • 完美。单引号没关系。我不能在一个对象上拥有一个对象数组。每个对象都需要在自己的行中。
    • 太棒了!很高兴知道单引号有效。不幸的是,Athena 不理解同一行中的多个 JSON 对象,也无法插入与换行符不同的“分隔符”(\n、CR-LF 等)
    猜你喜欢
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    • 1970-01-01
    • 2015-12-25
    • 2017-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多