У меня есть изображения TIFF, хранящиеся в файлах tar в HDFS.Я могу скачать 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.Я хочу посмотреть, есть ли способ потоковой передачи файлов TIFF непосредственно из файлов tar в hdfs.
Вот что у меня есть:
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
тоже не мог прочитать.