【问题标题】:Convert pandas dataframe to parquet format and upload to s3 bucket将 pandas 数据帧转换为 parquet 格式并上传到 s3 存储桶
【发布时间】:2021-03-20 10:01:15
【问题描述】:

我有一个 parquet 文件列表,我需要将这些文件从一个 S3 存储桶复制到另一个帐户中的另一个 s3 存储桶。在上传之前,我必须在镶木地板文件中添加几列。 我正在尝试将文件读取到 pandas 数据框,我正在添加列并将其转换为镶木地板,但它似乎不起作用。

这是我正在尝试的。 my_parquet_list 是我获取所有键列表的地方。

for file in my_parquet_list: 
    bucket = 'source_bucket_name'
    buffer = io.BytesIO()
    s3 = session.resource('s3')
    s3_obj = s3.Object(bucket,file)
    s3_obj.download_fileobj(buffer)
    df = pd.read_parquet(buffer)
    df["col_new"] = 'xyz'
    df["date"] = datetime.datetime.utcnow()
    df.to_parquet(buffer, engine= 'pyarrow', index = False)
    bucketdest = 'dest_bucket_name'
    s3_file = 's3_folder_path/'+'.parquet'
    print(s3_file)
    s3.Object(bucketdest, s3_file).put(Body=buffer.getvalue())
    print('loaded')

【问题讨论】:

  • 您能更详细地描述您观察到的错误吗?
  • @BlakeG 我得到的错误是“ArrowInvalid: Casting from timestamp[ns] to timestamp[ms] will lost data: 1607457464128523000”。
  • 您是否在 Google 上搜索过错误消息?当我搜索它时,我发现有一个配置设置可以更改,这将允许数据丢失。
  • @BlakeG 我没有用谷歌搜索,这是我收到的错误消息,这是导致错误 df.to_parquet(buffer, engine='pyarrow', index = False )
  • 始终在谷歌上搜索您的文字错误消息作为调试的第一步。

标签: python pandas amazon-s3 boto3 parquet


【解决方案1】:

只需pip install s3fs,然后配置你的aws CLI,最后你就可以使用df.to_parquet('s3://bucket_name/output-dir/df.parquet.gzip',index=False)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-29
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    • 2016-06-18
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多