我将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
也无法阅读。
答案 0 :(得分:2)
尝试将HDFS文件句柄传递到fileobj
的{{1}}参数
tarfile.open