2

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 万行左右,它可能不适合数据框/或者可能没有足够的内存来存储它,我的进程就会被杀死。如何遍历阅读器对象并获取块,以便我可以为每个块生成数据帧。

当我使用

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

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

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

4

1 回答 1

2

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

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

执行 batch.to_pandas() 的 cunsumer 函数

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

于 2021-06-07T12:45:08.240 回答