pyarrow hdfs 读取的数据比请求的多

pyarrow hdfs reads more data than requested

我正在使用 pyarrow 的 HdfsFilesystem 接口。当我调用 n 个字节的读取时,我通常会通过网络发送 0%-300% 的数据。我怀疑 pyarrow 正在阅读。

pyarrow parquet reader 没有这种行为,我正在寻找一种方法来关闭一般 HDFS 接口的预读。

我 运行 ubuntu 14.04。此问题存在于 pyarrow 0.10 - 0.13(最新发布的版本)中。我在 python 2.7

我一直在使用wireshark 来跟踪网络上传递的数据包。

我怀疑它是提前读取的,因为第一次读取的时间比第二次读取的时间长得多。

普通的pyarrow reader

import pyarrow as pa
fs = pa.hdfs.connect(hostname)

file_path = 'dataset/train/piece0000'
f = fs.open(file_path)
f.seek(0)
n_bytes = 3000000
f.read(n_bytes)

没有相同问题的 Parquet 代码

parquet_file = 'dataset/train/parquet/part-22e3'
pf = fs.open(parquet_path)
pqf = pa.parquet.ParquetFile(pf)
data = pqf.read_row_group(0, columns=['col_name'])

在 JIRA 票中讨论:https://issues.apache.org/jira/browse/ARROW-5432

一个 read_at 函数被添加到 pyarrow api 中,这将允许您以一定长度的偏移量读取文件,而无需提前读取。