Как записать pandas фрейм данных в s3, используя указанный формат раздела c? - PullRequest
1 голос
/ 03 февраля 2020

У меня есть pandas фрейм данных, который я хотел бы сохранить в S3 в разделах на основе столбца date - я хочу иметь что-то вроде s3://mybucket/facebook/year=2020/month=02/date=03.

Возможно отправить его напрямую в S3?

Мне удалось записать его на диск, но я получил ошибку при записи в S3: 'NoneType' object has no attribute '_isfilestore'.

Вот как я пытаюсь:


df = pd.DataFrame.from_dict([{'date_start': '2020-02-01', 'name': 'daniel'}, {'date_start': '2020-02-02', 'name': 'johnny'}])

df['year'] = pd.DatetimeIndex(df['date_start']).year
df['month'] = pd.DatetimeIndex(df['date_start']).month
df['date'] = pd.DatetimeIndex(df['date_start']).day

path = "facebook"

write_df_into_s3(df, "mybucket", path, partition_cols=['year', 'month', 'date'])

def write_df_into_s3(df, bucket_name, filepath, format="parquet", partition_cols=[]):
    buffer = None
    hook = S3Hook()

    if format == "parquet":
        buffer = BytesIO()
        #df.to_parquet(buffer, index=False, partition_cols=partition_cols)
        df.to_parquet('/tmp/', index=False, partition_cols=partition_cols)
    else:
        raise Exception("Format not implemented!")

    # hook.load_bytes(buffer.getvalue(), filepath, bucket_name)

    return f"s3://{bucket_name}/{filepath}

S3Hook - это обертка воздушного потока, написанная поверх boto3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...