我有一个带有数千万个相对较小的json文件的s3存储桶,每个文件小于10 K.
为了分析它们,我想将它们合并到少量文件中,每个文件每行有一个json(或其他一些分隔符),以及数千个这样的行。
这样我就可以更轻松(并且高效地)使用各种大数据工具。
现在,我很清楚,无法使用一个命令或函数调用,而是需要一个分布式解决方案,因为涉及的文件数量很多。
问题是,是否有准备和打包的东西,或者我必须提出自己的解决方案。
答案 0 :(得分:1)
不知道任何可以开箱即用的东西,但你可以很容易地自己做。解决方案还很大程度上取决于您完成此任务所需的速度。
2条建议: 1)列出所有文件,拆分列表,下载部分,合并和重新上传。
2)列出所有文件,然后逐个浏览它们并读取/下载并将其写入kinesis steam。配置kinesis通过kinesis firehose将文件转储到s3。
在这两种情况下,棘手的一点是处理失败并确保您不会多次获取数据。
为了完整性,如果文件更大(> 5MB),您还可以利用http://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadUploadPartCopy.html,这样您就可以直接合并S3中的文件而无需下载。
答案 1 :(得分:-1)
假设每个json文件只有一行,那么我会这样做:
lineWidth
这会将目录中的所有文件连接到新文件cat * >> bigfile
。
您现在可以一次读取bigfile
一行,json解码该行并使用它做一些有趣的事情。
如果您的json文件的格式是为了便于阅读,那么您首先需要combine all the lines in the file into one line。