迭代 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 结果生成一个数据框。不幸的是,如果查询有超过 5000 万行左右,它可能不适合数据帧/或可能没有足够的内存,我的进程就会被终止。我如何遍历 reader 对象并获取块,以便我可以为每个块生成数据帧。

当我使用

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

对于第一个块,它只会从结果中转换/提取 3968 行并将其放入数据帧中,但对于第二个块,它是一个 None 对象。我的示例确实有一百万行。

简而言之,我如何按照指定的块大小遍历读取器?是否可以在不将其转换为数据帧的情况下每行打印这些块?

解决方法

我写了以下内容,效果很好

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

执行batch.to_pandas()的消费者函数

缺少的部分是如何配置块大小

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...