如何从BufferedReader中S3中读取文件?

sbhatla:

我有一个非常大的文件(几个GB)的AWS S3,而我只需要少量的文件中的线,满足一定条件的。我不希望加载在内存中的整个文件,然后搜索和打印这些几行字 - 此内存负载会太高。以正确的方式将只加载所需要的内存中的那些行。

按照AWS文件从文件中读取

fullObject = s3Client.getObject(new GetObjectRequest(bucketName, key));
 displayTextInputStream(fullObject.getObjectContent());

private static void displayTextInputStream(InputStream input) throws IOException {
    // Read the text input stream one line at a time and display each line.
    BufferedReader reader = new BufferedReader(new InputStreamReader(input));
    String line = null;
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
    }
    System.out.println();
}

在这里,我们使用的是BufferedReader中这是我不清楚发生了什么下面在这里。

难道我们做每一次,我们正在阅读一个新行,且只保留当前行缓冲区中的网络呼叫S3?抑或是整个文件在内存中加载,然后通过读取的BufferedReader行由行?或者是介于两者之间?

洛萨:

其中一个问题的答案,你链接的文档中已经给出:

您的网络连接保持打开状态,直到你读所有的数据或关闭输入流。

一个BufferedReader不知道它会读取数据是从,因为你传递的另一个未来Reader吧。BufferedReader创建特定大小的缓冲液(例如4096个字符),并通过从底层填充读取该缓冲器Reader开始发放的呼叫数据之前read()read(char[] buf)

Reader您传递到BufferedReader是-顺便说一句-用另一个缓冲区为自己做从转换byte基于流为char基础的读者。它的工作方式与相同BufferedReader,因此内部缓冲区由从通过读取填充InputStream它是InputStream由您的S3-客户端返回。

如果你从流尝试加载数据这个客户端中到底会发生依赖于实现。一种方法是保持一个开放的网络连接,你可以从它如你所愿或数据块已经被读取,当你试图让下一个新打开后的网络连接可以关闭阅读。

上面引述的文件似乎是说,我们已经得到了前一种情况在这里,所以:没有,电话readLine都没有导致单一的网络电话。

并回答您的其他问题:没有,一BufferedReader中,InputStreamReader最有可能的InputStream由S3客户端返回的不是整个文件到内存中加载。这将违背首先使用流和S3客户可以简单地返回的整个目的byte[][],而不是(来左右的2 ^ 32个字节每极限byte-阵列)

编辑:有最后一段的一个例外。如果整个千兆字节大文件没有换行符,要求readLine实际上将导致读取整个数据到内存(最有可能的OutOfMemoryError错误)。我认为一个“正规”的文本文档,同时回答你的问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Python中从S3读取Avro文件?

如何在EMR中从s3读取文件?

如何在S3中读取ElasticSearch快照文件?

如何在 Lambda 函数中读取 S3 文件(在 python 中)

如何从Amazon s3中的Rails中读取手动上传的文件(图像/文本)?

如何从Web上的Python Flask中的AWS s3中读取文件

无法在 Python 3 中从 S3 读取 PNG 文件?

如何使用Python在myBucket中上传CSV文件并在S3 AWS中读取文件

在Spark中从HDFS或S3读取边缘DB文件

在R中从AWS S3读取gzip文件的内容

如何使用 Lambda 和 Python 在 AWS s3 中读取和覆盖文件?

如何使用python从S3存储桶中读取.txt文件并查看内容?

如何将图像文件从S3存储桶直接读取到内存中?

如何使用pyarrow从S3中读取拼花文件列表作为熊猫数据框?

如何在Spark数据框中从AWS S3读取多个文件?

Presto:如何从s3中读取在子文件夹中分区的整个存储桶?

如何在S3上的文件中读取上次修改日期

我如何在Amazon S3中读取文件的内容

如何将多个压缩文件从S3读取到单个RDD中?

在S3存储桶中,如何正确配置json格式的文件以进行下载或读取?

如何从S3读取单个实木复合地板文件到dask数据帧中?

如何在Java中从S3读取Snappy压缩文件

如何从AWS Lambda的s3存储桶中读取csv文件?

如何使用pyarrow从s3中读取分区的实木复合地板文件?

如何从 S3 存储桶中读取最后修改的 csv 文件?

如何读取亚马逊S3中文件的元数据

如何使用http请求将多个gzipped文件从S3读取到单个RDD中?

如何在 S3 中读取经过训练的数据文件

如何使用pyspark从s3存储桶中读取csv文件