amazon-web-services - 在 S3 中连接 JSON 文件
问题描述
我有一个工作流程,它正在启动一堆并行 lambda 函数以快速批处理数据,这些数据正在访问服务,然后将 JSON 响应写入 S3 存储桶。因此,我可以拥有数千个 5MB 以上的 JSON 文件。
现在,我需要将所有这些文件聚合到一个可以返回给请求者的 JSON 文件中。
我试图通过MultiPart Upload来执行此操作,因此我不必下载、处理和重新上传文件。相反,我可以通过将部件复制到最终文件来仅在 S3 中完成所有操作。这实际上效果很好,但问题是结果不再是有效的 JSON,因为它实际上只是将文件粘在一起而不合并 JSON 数组(见下文)。
例如:
文件 1:
[
{
"foo": "bar1"
},
{
"foo": "bar2"
}
]
文件 2:
[
{
"foo": "bar3"
},
{
"foo": "bar4"
}
]
分段上传结果:
[
{
"foo": "bar1"
},
{
"foo": "bar2"
}
][
{
"foo": "bar3"
},
{
"foo": "bar4"
}
]
正如您在上面看到的,我现在有一个无效的 JSON,其中一个文件的结束括号和另一个文件的开始括号而不是逗号。
我想要的结果:
[
{
"foo": "bar1"
},
{
"foo": "bar2"
},
{
"foo": "bar3"
},
{
"foo": "bar4"
}
]
现在我被困在做什么。3GB RAM 限制意味着我可能无法只打开每个文件并在内存中构建最终结果然后写入 S3,因为它很容易超过 3GB。
有没有我忽略的选项,或者我只需要编写一些讨厌的代码来蛮力它?
我唯一能想到的(我真的不想做)是格式化没有结束括号的第一个文件,没有括号的中间文件和没有开始括号的最后一个文件。
Head file
[
{
"foo": "bar1"
},
Any middle files
{
"foo": "bar2"
},
Final file
{
"foo": "barN"
}
]
因此,当我通过 Multipart Copy 进行连接时,它将是正确的......
[
{
"foo": "bar1"
},
{
"foo": "bar2"
},
{
"foo": "barN"
}
]
解决方案
推荐阅读
- python - 带有自定义 x 和 y 的 Distplot
- javascript - 对 V8 如何将功能变为热门功能感到困惑?
- java - 在本地服务器上发送 android 应用程序的输出
- security - 我可以针对多个身份提供者保护一个 API 吗?
- python - 如何修复 getpassWarning 并正确使用 getpass?
- c# - C# AspNet Core 和 Heroku 入门
- python - 获取当天拍摄数据的手段
- javascript - 无法使用类声明设置值
- jquery - 在 JQuery 中使用 Ajax 调用在 HTML 视图中显示卡片
- java - 用于 java.time 日期时间类型的 Vaadin Flow 渲染器,不仅限于 LocalDateTime 和 LocalDate 类