在S3上记录pyarrow创建的实木复合地板文件名

时间:2019-12-02 12:13:32

标签: amazon-s3 parquet pyarrow s3fs apache-arrow

我们正在使用pyarrow将数据附加到存储在S3(分区)中的现有镶木地板数据集中。每小时在AWS lambda上运行几次。一个最小的例子是:

import pyarrow as pa
import pyarrow.parquet as pq
import s3fs

df = ... # Existing pandas df

table = pa.Table.from_pandas(df)

pq.write_to_dataset(
   table, 
   filesystem=s3,
   root_path=f"s3://s3-path/",
   partition_cols=['year', "month"]
)

结果,根据内部数据值,许多镶木地板文件将被写入S3。我们的目的是通过输出结果文件文件名(S3键)来跟踪哪些文件已写入文件系统。

是否有任何方法可以捕获由pyarrows3fs写入的实际文件名? Parquet文件的名称是根据计算得出的哈希名称任意命名的,我对所提到的两个软件包都没有看到任何日志记录功能。

2 个答案:

答案 0 :(得分:2)

0.15.0开始,您可以在写入之前为文件提供名称partition_filename_cb

pyarrow.parquet.write_to_dataset(table, root_path, partition_cols=None, partition_filename_cb=None, filesystem=None, **kwargs)

答案 1 :(得分:0)

如果您愿意同时使用AWS Data Wrangler

import awswrangler as wr

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

print(paths)