【问题标题】:Log parquet filenames created by pyarrow on S3记录由 pyarrow 在 S3 上创建的 parquet 文件名
【发布时间】:2020-03-27 01:18:00
【问题描述】:

我们正在使用 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。我们的目标是通过输出结果 filename(S3 密钥)来跟踪哪些文件已写入文件系统。

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

【问题讨论】:

  • 您使用的是什么 pyarrow 版本?从 0.15.0 开始,您可以在编写之前为您的文件提供名称。 arrow.apache.org/docs/python/generated/…
  • 谢谢!像魅力一样工作,错过了这个新功能。如果您想添加评论作为答案,我会将其标记为已选中,否则我可以自己回答。
  • 将在某个时候发布答案。感谢您的确认。

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    如果你也愿意使用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)
    

    【讨论】:

      猜你喜欢
      • 2019-01-06
      • 2020-02-25
      • 2020-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-08
      • 1970-01-01
      • 2021-05-20
      相关资源
      最近更新 更多