【问题标题】:Loading lines of JSON from Amzon S3 to DyanmoDB将 JSON 行从 Amazon S3 加载到 DynamoDB
【发布时间】:2016-07-19 23:41:56
【问题描述】:

我的 apache-spark (PySpark) 代码有一些输出,如下所示(每行非常简单的 JSON 对象):

{'id': 1, 'value1': 'blah', 'value2': 1, 'value3': '2016-07-19 19:35:13'}
{'id': 2, 'value1': 'yada', 'value2': 1, 'value3': '2016-07-19 19:35:13'}
{'id': 3, 'value1': 'blah', 'value2': 2, 'value3': '2016-07-19 19:35:13'}
{'id': 4, 'value1': 'yada', 'value2': 2, 'value3': '2016-07-19 19:35:13'}
{'id': 5, 'value1': 'blah', 'value2': 3, 'value3': '2016-07-19 19:35:13'}
{'id': 6, 'value1': 'yada', 'value2': 4, 'value3': '2016-07-19 19:35:13'}

我想将它们作为文档写入 DynamoDB 表。我不想将其转换为 Map 格式(如果可以避免的话)。关于如何解决这个问题的任何想法?关于格式问题的文档很少。

有一些新的 DocumentClient() 东西,但我不能从 CLI 中使用它。例如,将上述行之一作为项目提供给“put-item”aws cli 命令会产生错误:

aws dynamodb put-item --table-name mytable --item file://item.txt

Parameter validation failed:
Invalid type for parameter Item.......

【问题讨论】:

    标签: json amazon-web-services amazon-s3 amazon-dynamodb


    【解决方案1】:

    如下所示的 JSON 字符串不能在 DynamoDB 中直接put-itemed:

    {'id': 1, 'value1': 'blah', 'value2': 1, 'value3': '2016-07-19 19:35:13'}
    

    它需要有如下格式:

    {"id": {"N": 1}, "value1": {"S": "blah"}, "value2": {"N": 1}, "value3": {"S": "2016-07-19 19:35:13"}}
    

    那是因为,从前者来看,DynamoDB 没有办法知道idvalue1 等的数据类型。

    在我看来,你有两个选择:

    • 使用某些实用程序将您的数据从前者转换为后者。例如,jq
    • 使用AWS Data Pipeline

    【讨论】:

    • 谢谢。我希望避免重铸数据。但是,如果我不得不这样做,那也不会是世界末日。当我使用 AWS Data Pipeline 时,它​​本身似乎无法处理这种转换。预计会吗?
    • 应该——我建议你仔细阅读它的文档;接受我的回答后!
    猜你喜欢
    • 2015-07-24
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2016-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多