3

我们正在使用 pyarrow 将数据附加到存储在 S3(分区)中的现有 parquet 数据集。这每小时在 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"]
)

结果,将根据内部数据值将许多 parquet 文件写入 S3。我们的目标是通过输出结果文件名(S3 密钥)来跟踪哪些文件已写入文件系统。

有什么方法可以捕获由pyarrowor编写的实际文件名s3fs?Parquet 文件名是根据计算的哈希名称任意命名的,我没有看到提到的两个包的任何日志记录功能。

4

2 回答 2

3

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

pyarrow.parquet.write_to_dataset(table, root_path, partition_cols=None, partition_filename_cb=None, filesystem=None, **kwargs)
于 2019-12-11T11:26:25.167 回答
1

如果您也愿意使用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)
于 2020-01-10T13:16:58.987 回答