Сжатие s3fs gzip на панде - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь записать фрейм данных в виде CSV-файла на S3, используя библиотеку s3fs и панды.Несмотря на документацию, я боюсь, что параметр сжатия gzip не работает с s3fs.

def DfTos3Csv (df,file):
    with fs.open(file,'wb') as f:
       df.to_csv(f, compression='gzip', index=False)

Этот код сохраняет фрейм данных как новый объект в S3, но в простом CSV, а не в формате gzip.С другой стороны, функция чтения работает нормально, используя этот параметр сжатия.

def s3CsvToDf(file):
   with fs.open(file) as f:
      df = pd.read_csv(f, compression='gzip')
  return df

Предложения / альтернативы проблеме записи?Заранее спасибо!

1 Ответ

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

Параметр сжатия функции to_csv() не работает при записи в поток.Вы должны выполнить архивирование и загрузку отдельно.

import gzip
import boto3
from io import BytesIO, TextIOWrapper

buffer = BytesIO()

with gzip.GzipFile(mode='w', fileobj=buffer) as zipped_file:
    df.to_csv(TextIOWrapper(zipped_file, 'utf8'), index=False)

s3_resource = boto3.resource('s3')
s3_object = s3_resource.Object('bucket_name', 'key')
s3_object.put(Body=buffer.getvalue())
...