分批将一百万行CSV写入S3

时间:2019-03-19 16:53:36

标签: java amazon-web-services amazon-s3

我正在尝试在S3上构建一个非常大的CSV文件。

  • 我想在S3上构建此文件
  • 我想批量向该文件添加行。
  • 行数可能在10k到1M之间
  • 每批的大小可能小于5Mb(因此无法进行多部分上传)

完成这样的事情的正确方法是什么?

3 个答案:

答案 0 :(得分:1)

传统上,在大数据处理(“数据湖”)中,与单个表相关的信息存储在目录而不是单个文件中。因此,将信息附加到表就像将另一个文件添加到目录一样简单。目录中的所有文件都必须具有相同的架构(例如CSV列或JSON数据)。

然后可以使用以下工具使用文件目录:

  • Hadoop上的Spark,Hive和Presto
  • Amazon Athena
  • Amazon Redshift Spectrum

此方法的优点在于,上述系统可以并行处理多个文件,而不仅限于使用单线程方法处理单个文件。

常见的做法是使用 gzip 之类的技术压缩文件。这降低了存储要求,并使从磁盘读取数据的速度更快。添加其他文件很容易(只需添加另一个csv.gz文件),而不必解压缩,附加和重新压缩文件。

底线:建议重新考虑您对“一个很大的CSV文件”的要求。

答案 1 :(得分:1)

“一个大文件”对您不起作用-您无法将行追加到s3文件中,而无需先下载整个文件,添加行,然后在旧文件上上传新文件-对于小文件,它可以工作,但是随着文件变大,带宽和处理将在几何上增加,并且可能变得非常缓慢,甚至可能会很昂贵。

最好将您的设计重构为使用许多小文件而不是一个大文件。

答案 2 :(得分:0)

在S3上保留一个5MB的垃圾对象,并对其进行级联,其中第1部分= 5MB的垃圾对象,第2部分=您要上传和连接的文件。继续对每个片段重复此操作,最后使用范围复制删除5MB垃圾。