java - 将100万行CSV分批写入S3
问题描述
我正在尝试在 S3 上构建一个非常大的 CSV 文件。
- 我想在 S3 上构建这个文件
- 我想批量追加行到这个文件。
- 行数可以在 10k 到 1M 之间
- 每批的大小可能 < 5Mb(因此分段上传不可行)
完成这样的事情的正确方法是什么?
解决方案
传统上,在大数据处理(“数据湖”)中,与单个表相关的信息存储在目录中,而不是单个文件中。因此,将信息附加到表就像将另一个文件添加到目录一样简单。目录中的所有文件都需要具有相同的架构(例如 CSV 列或 JSON 数据)。
然后可以将文件目录与以下工具一起使用:
- Hadoop 上的 Spark、Hive 和 Presto
- 亚马逊雅典娜
- Amazon Redshift 频谱
这种方法的一个好处是上述系统可以并行处理多个文件,而不是局限于以单线程方法处理单个文件。
同样常见的是使用gzip等技术压缩文件。这降低了存储要求并加快了从磁盘读取数据的速度。添加其他文件很容易(只需添加另一个文件),而不必解压缩、附加和重新压缩文件。csv.gz
底线:建议重新考虑您对“一个很棒的大 CSV 文件”的要求。
推荐阅读
- excel - TRIM 将日期向左对齐
- scikit-learn - 首次安装,Conda 无法正常工作。错误 (699)
- r - 在 Mac M1 上使用来自 homebrew 的 geos/proj/gdal 从源空间 R 库安装
- apache-kafka - 当kafka不工作时,如何确保发送的消息不丢失?
- javascript - 如何防止 iOS 浏览器在客户端图像调整大小期间崩溃?
- apache-kafka - kafka-python:使用 SASL_SSL + SCRAM-SHA-512 时在接收期间重置连接
- varnish - 如何从 URL 中提取值并检查缓存以在清漆中加载数据
- r - 改变y轴旋转——改变ggsurvplot的主题元素
- python - 添加行时如何让我的字典 discord.py 机器人停止循环
- r - 如何在 R 中的 list() 上执行嵌套循环?