Я пытаюсь прочитать некоторые журналы из процесса Hadoop, который я запускаю в AWS. Журналы хранятся в папке S3 и имеют следующий путь.
bucketname = name key = y/z/stderr.gz Здесь Y - это идентификатор кластера, а z - имя папки. Оба они действуют как папки (объекты) в AWS. Таким образом, полный путь похож на x/y/z/stderr.gz.
Теперь я хочу разархивировать этот.gz файл и прочитать содержимое файла. Я не хочу загружать этот файл в мою систему, чтобы сохранить содержимое в переменной python.
Это то, что я пробовал до сих пор.
bucket_name = "name"
key = "y/z/stderr.gz"
obj = s3.Object(bucket_name,key)
n = obj.get()['Body'].read()
Это дает мне формат, который не читается. Я также пробовал
n = obj.get()['Body'].read().decode('utf-8')
который дает ошибку, utf8 'codec не может декодировать байт 0x8b в позиции 1: недопустимый стартовый байт.
Я также пробовал
gzip = StringIO(obj)
gzipfile = gzip.GzipFile(fileobj=gzip)
content = gzipfile.read()
Это возвращает ошибку IOError: не файл gzipped
Не знаете, как декодировать этот.gz файл.
Изменить - найти решение. Необходимо передать n в него и использовать BytesIO
gzip = BytesIO(n)