如何使用Pyarrow实现流写入效果

时间:2019-06-25 04:55:33

标签: parquet pyarrow

我拥有的数据是一种流数据。我想将它们存储到单个Parquet文件中。 但是Pyarrow每次都会覆盖Parquet文件。那我该怎么办?

我尝试不关闭编写器,但是似乎无法完成,因为如果不关闭它,那么我将无法读取该文件。

这是包裹:

import pyarrow.parquet as pp
import pyarrow as pa
for name in ['LEE','LSY','asd','wer']:
    writer=pq.ParquetWriter('d:/test.parquet', table.schema)
    arrays=[pa.array([name]),pa.array([2])]
    field=[pa.field('name',pa.string()),pa.field('age',pa.int64())]
    table=pa.Table.from_arrays(arrays,schema=pa.schema(field))
    writer.write_table(table)
writer.close()

但是实际上我想每次都关闭编写器,然后重新打开它以将一行添加到数据中,如下所示:

for name in ['LEE','LSY','asd','wer']:
    writer=pq.ParquetWriter('d:/test.parquet', table.schema)
    arrays=[pa.array([name]),pa.array([2])]
    field=[pa.field('name',pa.string()),pa.field('age',pa.int64())]
    table=pa.Table.from_arrays(arrays,schema=pa.schema(field))
    writer.write_table(table)
    writer.close()

1 个答案:

答案 0 :(得分:0)

镶木地板文件一旦写入便无法追加。这种情况下的典型解决方案是每次写入一个新的实木复合地板文件(可以一起形成一个分区的实木复合地板数据集),或者,如果数据不多,则首先将python中的数据收集到一个表中,然后再写入一次。

有关此电子邮件线程的更多讨论,请参见:https://lists.apache.org/thread.html/07b1e3f13b5dae7e34ee3752f3cd4d16a94deb3a5f43893b73475900@%3Cdev.arrow.apache.org%3E