从 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)
我将 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)