Повторить pyarrow._flight.FlightStreamReader

Как мне перебрать reader, предполагая, что это объект pyarrow._flight.FlightStreamReader. Который можно получить от

reader = client.do_get(flight_info.endpoints[0].ticket, options)

Весь скрипт example.py взят с https://github.com/dremio-hub/arrow-flight-client-examples/blob/main/python/example.py

В настоящее время я пробую reader.read_pandas(), чтобы он генерировал кадр данных для всех результатов Dremio. К сожалению, если запрос содержит более 50 миллионов строк или около того, он может не соответствовать фрейму данных/или может не хватить памяти для него, и мой процесс просто будет убит. Как мне перебирать объект читателя и просто получать куски, чтобы я мог генерировать кадр данных для каждого куска.

Когда я использую

for chunk in reader.read_chunk():
    print(chunk.to_pandas())

для первого фрагмента он преобразует/извлекает только 3968 строк из результатов и помещает их в фрейм данных, но для второго фрагмента это объект None. В моем примере действительно миллионы строк.

Короче говоря, как я могу перебирать читатель для указанного размера фрагмента? И можно ли печатать эти куски по строкам, не преобразовывая их в фрейм данных?


person user1179317    schedule 30.04.2021    source источник


Ответы (1)


Я написал следующее, и это прекрасно работает

while True:
 try:
  batch, buf = reader.read_chunk()
  yield batch
 except StopIteration:
  break

Функция cunsumer, выполняющая команду batch.to_pandas()

Недостающая часть - как настроить размер блока

person MBZ    schedule 07.06.2021