Потоковая передача файлов из tar-файла в hdfs - PullRequest
0 голосов
/ 01 января 2019

У меня есть изображения 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 тоже не мог прочитать.

1 Ответ

0 голосов
/ 01 января 2019

Попробуйте передать дескриптор файла HDFS аргументу fileobj, равному tarfile.open

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