问题描述
我如何遍历 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()的消费者函数
缺少的部分是如何配置块大小