Есть ли способ также установить значения метаданных AWS при сохранении фрейма данных в виде файла паркета на S3 с использованием df.to_parquet? - PullRequest
0 голосов
/ 25 апреля 2020

Когда я помещаю объект в python, я могу установить метаданные одновременно. Пример:

self.s3_client.put_object(
 Bucket=self._bucket,
 Key=key,
 Body=body,
 ContentEncoding=self._compression,
 ContentType="application/json",
 ContentLanguage="en-US",
 Metadata={'other-key':'value'}
)

Кажется, что и pyarrow, и fastparquet не позволяют мне передавать эти конкретные ключевые слова, несмотря на то, что pandas документация говорит, что дополнительные ключевые слова пропущены.

Это сохраняет данные так, как я хочу, но я не могу прикрепить метаданные с любым синтаксисом, который я пробую.

df.to_parquet(s3_path, compression='gzip')

Если был простой способ сжать паркет и преобразовать его это в байтовый поток.

Не хотел бы записать файл дважды (либо локально, затем передать на AWS, либо дважды на AWS)

1 Ответ

0 голосов
/ 25 апреля 2020

Хорошо. Нашел это быстрее чем я думал.

import pandas as pd
import io

#read in data to df. 
df=pd.read_csv('file.csv')

body = io.BytesIO()
df.to_parquet(
    path=body,
    compression="gzip",
    engine="pyarrow",
)
bucket='MY_BUCKET'
key='prefix/key'
s3_client.put_object(
    Bucket=bucket,
    Key=key,
    Body=body.getvalue(),
    ContentEncoding='gzip',
    ContentType="application/x-parquet",
    ContentLanguage="en-US",
    Metadata={'user-key':'value'},
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...