18

我正在尝试用 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')

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

4

2 回答 2

2

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

  1. 附加
  2. 覆盖
  3. 覆盖分区

例子:

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"])
于 2020-01-10T13:00:22.433 回答
0

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

import boto3
resource = boto3.resource('s3')
resource.Bucket('mybucket').objects.filter(Prefix='output/my_table').delete()
于 2019-05-23T00:40:17.253 回答