从Amzon S3到DyanmoDB加载JSON行

时间:2016-07-19 23:41:56

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

我的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.......

1 个答案:

答案 0 :(得分:0)

JSON字符串(如下所示)无法直接在DynamoDB中put-item编写:

{'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