Как использовать Pyarrow для достижения эффекта потоковой записи - PullRequest
0 голосов
/ 25 июня 2019

Данные, которые у меня есть, являются своего рода потоковыми данными.И я хочу сохранить их в одном файле 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 голосов
/ 11 июля 2019

Файлы паркета не могут быть добавлены после их записи.Типичное решение для этого случая - каждый раз записывать новый файл паркета (который может вместе формировать один многораздельный набор данных паркета), или, если данных немного, сначала собрать данные в python в одну таблицу, а затем записать один раз.

Посмотрите эту ветку электронной почты с дополнительным обсуждением этого вопроса: https://lists.apache.org/thread.html/07b1e3f13b5dae7e34ee3752f3cd4d16a94deb3a5f43893b73475900@%3Cdev.arrow.apache.org%3E

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...