使用不完整的镶木地板文件时,在页脚中找不到镶木地板魔术字节



我希望能够处理在写入磁盘时未完全关闭的镶木地板文件。

基本上,我使用箭头RecordBatchBuilder+镶木地板编写器从C++应用程序生成一些数据,每当我有新的一批数据时,我都会创建行组。当C++应用程序崩溃时,我可能无法正确清理镶木地板文件句柄。此外,我可能想在C++应用程序仍在运行时读取数据,并向其添加更多数据。

根据https://parquet.apache.org/docs/file-format/data-pages/errorrecovery/,应该可以处理不完整的数据,只要它有一些完整的行组。

当我用pandas+pyarrow从Python中读取数据时;在页脚中找不到Parquet魔术字节";。我如何才能使它只处理完全写入的行组?

或者,有没有一种方法可以让我写数据,这样每当我写一个批并生成一个有效的镶木地板文件时,我就可以刷新任何未处理的数据?当然,我可以为每个批次生成一个新的镶木地板文件,这可以做我想做的事情,但这有点打破了最初使用行组的要点。

进口熊猫作为pdpd.read_parquet('path/to/file.parquet'(

我明白pyarrow.lib.ArrowInvalid:无法打开Parquet输入源":在页脚中找不到Parquet魔术字节。文件已损坏,或者这不是镶木地板文件。

我希望得到一个带有文件被截断警告的数据帧。

您提供的链接显示:

If an error happens while writing the file metadata, all the data written will be unreadable. This can be fixed by writing the file metadata every Nth row group.

据我所知,没有任何参考实现实现过第二句(尤其是使用同步标记(,C++/Python也没有。

您可能更幸运的是,使用RecordBatchStreamWriter使用Arrow IPC格式写出批次,然后尝试逐个读取它们,并发现读取最后一个不完整的批次时可能出现的错误。一旦你有了记录批次,你就可以通过pyarrow将它们转换为Pandas。

最新更新