从HDFS中的tar文件流式传输文件

时间:2018-12-31 21:15:14

标签: python streaming tarfile pyarrow

我将tiff图像存储在HDFS的tar文件中。我可以下载tar文件并以这种方式从其中流式传输:

tar = tarfile.open("filename.tar", 'r|')
for tiff in tar:
    if tiff.isfile():
        a = tar.extractfile(tiff).read()
        na = np.frombuffer(c, dtype=np.uint8)
        im = cv2.imdecode(na, cv2.IMREAD_COLOR)

这给了我一个numpy数组。我想看看是否有一种方法可以直接从hdfs的tar文件中流式传输tiff文件。

这是我所拥有的:

import pyarrow as pa
fs = pa.hdfs.connect()
with fs.open(hdfs_path_to_tar_file, 'rb') as f:
    print(type(f))

<class 'pyarrow.lib.HdfsFile'>

我不知道如何使用tarfile来阅读它。我需要将其转换为可以用tarfile.open读取的字节类型对象。但是我不想一开始就读取整个文件。 tar文件非常大,因此我不想将它们放入内存中,即f.read()返回字节,但将整个内容放入内存中。虽然,tarfile.open也无法阅读。

1 个答案:

答案 0 :(得分:2)

尝试将HDFS文件句柄传递到fileobj的{​​{1}}参数

tarfile.open