【问题标题】:Overwrite parquet file with pyarrow in S3在 S3 中用 pyarrow 覆盖镶木地板文件
【发布时间】:2019-02-05 07:51:45
【问题描述】:

我正在尝试使用 S3 中的 pyarrow 覆盖我的镶木地板文件。我看过文档,但没有找到任何东西。

这是我的代码:

from s3fs.core import S3FileSystem
import pyarrow as pa
import pyarrow.parquet as pq

s3 = S3FileSystem(anon=False)
output_dir = "s3://mybucket/output/my_table"

my_csv = pd.read_csv(file.csv)
my_table = pa.Table.from_pandas(my_csv , preserve_index=False)

pq.write_to_dataset(my_table, 
                    output_dir,
                    filesystem=s3,
                    use_dictionary=True,
                    compression='snappy')

write_to_dataset 函数中是否有类似mode = "overwrite" 的选项?

【问题讨论】:

    标签: python amazon-s3 pyarrow python-s3fs


    【解决方案1】:

    抱歉,目前还没有这样的选项,但我解决它的方法是使用 boto3 在写入文件之前删除它们。

    import boto3
    resource = boto3.resource('s3')
    resource.Bucket('mybucket').objects.filter(Prefix='output/my_table').delete()
    

    【讨论】:

      【解决方案2】:

      我认为最好的方法是使用AWS Data Wrangler,它提供了 3 种不同的写入模式:

      1. 追加
      2. 覆盖
      3. overwrite_partitions

      例子:

      import awswrangler as wr
      
      wr.s3.to_parquet(
          dataframe=df,
          path="s3://...",
          mode="overwrite",
          dataset=True,
          database="my_database",  # Optional, only with you want it available on Athena/Glue Catalog
          table="my_table",
          partition_cols=["PARTITION_COL_NAME"])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-27
        • 2019-11-20
        • 2021-12-06
        • 2018-05-06
        • 2021-10-28
        • 2017-12-18
        • 2018-04-17
        • 2022-11-03
        相关资源
        最近更新 更多