【发布时间】:2021-10-03 21:09:01
【问题描述】:
我要做什么
我正在使用 PyArrow 读取一些 CSV 并将它们转换为 Parquet。我阅读的一些文件有很多列并且内存占用很高(足以使运行该作业的机器崩溃)。我试图在读取 CSV 的同时以类似于 Pandas read_csv 和 chunksize 的工作方式对文件进行分块。
例如,这就是 pandas 中分块代码的工作方式:
chunks = pandas.read_csv(data, chunksize=100, iterator=True)
# Iterate through chunks
for chunk in chunks:
do_stuff(chunk)
我想将类似的功能移植到 Arrow
我尝试过的事情
我注意到 Arrow 有 ReadOptions,其中包含一个 block_size 参数,我想也许我可以像这样使用它:
# Reading in-memory csv file
arrow_table = arrow_csv.read_csv(
input_file=input_buffer,
read_options=arrow_csv.ReadOptions(
use_threads=True,
block_size=4096
)
)
# Iterate through batches
for batch in arrow_table.to_batches():
do_stuff(batch)
由于这个 (block_size) 似乎没有返回迭代器,我的印象是这仍然会使 Arrow 读取内存中的整个表,从而重新创建我的问题。
最后,我知道我可以先使用 Pandas 读取 csv 并对其进行分块,然后转换为箭头表。但我试图避免使用 Pandas 并且只使用 Arrow。
如果需要,我很乐意提供更多信息
【问题讨论】:
标签: python pyarrow apache-arrow