我正在使用Pyarrow库来最佳存储Pandas DataFrame。我需要尽可能快地逐行处理pyarrow表,而不将其转换为pandas DataFrame(它不适合内存)。熊猫有iterrows()/ iterrtuples()方法。除了for循环和索引寻址之外,是否有任何其他快速迭代Pyarrow Table的方法?
答案 0 :(得分:1)
该软件目前尚未针对此用例进行任何优化。我建议使用Cython或C ++或逐行与数据进行交互。如果您还有其他疑问,请访问开发人员邮件列表dev@arrow.apache.org
答案 1 :(得分:0)
此代码对我有用:
for batch in table.to_batches():
d = batch.to_pydict()
for c1, c2, c3 in zip(d['c1'], d['c2'], d['c3']):
# Do something with the row of c1, c2, c3
答案 2 :(得分:0)
如果将大型实木复合地板数据集拆分为多个文件,则这似乎相当快且内存高效。
import argparse
import pyarrow.parquet as pq
from glob import glob
def parse_args():
parser = argparse.ArgumentParser()
parser.add_argument('parquet_dir')
return parser.parse_args()
def iter_parquet(dirpath):
for fpath in glob(f'{dirpath}/*.parquet'):
tbl = pq.ParquetFile(fpath)
for group_i in range(tbl.num_row_groups):
row_group = tbl.read_row_group(group_i)
for batch in row_group.to_batches():
for row in zip(*batch.columns):
yield row
if __name__ == '__main__':
args = parse_args()
total_count = 0
for row in iter_parquet(args.parquet_dir):
total_count += 1
print(total_count)