У меня есть 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.