ds.read_file() 在返回时会把整个文件下载到内存中吗,还是返回一个支持按行组进行惰性访问的句柄?

编程语言 2026-07-09

在Dash Enterprise应用中读取来自S3数据源的大型Parquet文件时,我遇到了 内存溢出(OOM) 错误。我的当前代码大致如下:

python


from dash_enterprise_libraries import data_sources as ds 
import pyarrow.parquet as pq  

""" DATA_SOURCE  a connector within dash enterprise to to securely store credintials and connect to respective data source """  

file_handle = ds.read_file(path, DATA_SOURCE)  
table = pq.read_table(file_handle, columns=columns, filters=filter_expr)

我注意到代码在第二次读取前执行了 file_handle.seek(0),这表明 ds.read_file() 返回了一个 内存缓冲区(类似于 BytesIO),而不是一个惰性/流式文件句柄。

我的问题: ds.read_file() 会在返回前将整个文件下载到内存中吗,还是它返回一个支持惰性按行组访问的句柄——以便pyarrow的 filters= 可以下推谓词,从而避免从S3下载不必要的数据?

解决方案

因此,你的代码会把文件下载到内存中,然后再传递给pq.read_table

在这段代码中并没有使用延迟加载。来自S3的文件将不得不被下载到内存,除非你在使用S3的流式服务。在你的情况下,你并不是以流的方式进行读取。

希望这对你有帮助。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章