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

Streaming files from a tar file in hdfs

我将 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() returns 字节,而是将整个文件放在内存中。虽然,tarfile.open 也看不懂。

尝试将 HDFS 文件句柄传递给 tarfile.open

fileobj 参数
tf = tarfile.open(fileobj=f)