首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用java语言从S3下载大型CSV文件的最佳实践是什么?

用java语言从S3下载大型CSV文件的最佳实践是什么?
EN

Stack Overflow用户
提问于 2019-09-19 01:10:34
回答 1查看 937关注 0票数 0

我正在尝试从S3获取一个大的CSV文件,但下载失败并显示“java.net.SocketException: Connection reset”,这可能是因为InputStream打开的时间太长(下载通常需要一个多小时,因为我正在对流式内容执行多个耗时的过程)。这就是我目前解析文件的方式:

代码语言:javascript
复制
InputStream inputStream = new GZIPInputStream(s3Client.getObject("bucket", "key").getObjectContent());
Reader decoder = new InputStreamReader(inputStream, Charset.defaultCharset());
BufferedReader isr = new BufferedReader(decoder);
CSVParser csvParser = new CSVParser(isr, CSVFormat.DEFAULT);
CSVRecord nextRecord = csvParser.iterator().next();
...

我知道我必须将下载拆分成多个短的getObject调用,并为GetObjectRequest定义一个偏移量,但我想知道如何在CSV的情况下定义这个偏移量,因为我需要完整的行。

我是否必须抛弃解析器库,自己将每一行解析成一个对象,这样我就可以保留读取字节的计数,并将其用作下一批处理的偏移量?对我来说,这似乎不是很健壮。有没有实现CSV记录批量下载的最佳实践?

EN

回答 1

Stack Overflow用户

发布于 2019-09-20 23:24:40

我决定简单地使用专用的getObject(GetObjectRequest getObjectRequest, File destinationFile)方法将整个CSV复制到磁盘上的一个临时文件中。这将尽快关闭HTTP连接,并允许我从本地文件中毫无问题地获取InputStream。它没有解决批量下载的最佳方式的问题,但它是一个很好的简单的变通方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57997770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档