皮亚罗·ParquetFile 和相关函数抛出 OSError:无法反序列化节俭:TProtocol异常:超出大小限制错误



作为分析管道的一部分,我使用了大约60000个镶木地板文件,其中包含必须连接的每一行数据。每个文件可以包含一组不同的列,在将它们与Ray数据集连接之前,我需要对它们进行统一。当读取Pandas使用pyarrow创建的镶木地板文件时,我得到了错误OSError: Couldn't deserialize thrift: TProtocolException: Exceeded size limit error

由于Ray依赖pyarrow 6.0.1来读取/写入文件,因此我尝试使用pyarrow 9.0.0、8.0.0和6.0.1版本,使用命令pyarrow.parquet.ParquetFile()pyarrow.parquet.read_metadata()pyarrow.parquet.ParquetDataset()分别读取每个文件。通过这样做,我已经确定了导致错误的一个文件。这个文件是我的数据集中最大的(496MB,而其他所有文件都<200MB(。我不确定这个异常意味着什么,但我想知道这是否与将文件放入内存时的文件大小扩展有关?可以通过更改pyarrow中的设置来给它更多的读取内存来避免这个错误吗?是否可以批量读取此文件以避免此错误?

我使用的是一个由64个CPU核心和249G RAM组成的集群。我的python 3.8.10环境位于一个Singularity容器中。该环境使用Ray 2.0.0和pyarrow 6.0.1以及许多其他python包,包括机器学习库。

这表明元数据(而不是数据(很大或已损坏。你可以尝试在read_table上设置大的值,看看这是否有助于

最新更新