【问题标题】:reading paritionned dataset in aws s3 with pyarrow doesn't add partition columns使用 pyarrow 在 aws s3 中读取分区数据集不会添加分区列
【发布时间】:2020-04-25 02:22:10
【问题描述】:

我正在尝试在 aws s3 中读取分区数据集,它看起来像:

MyDirectory--code=1--file.parquet
           --code=2--another.parquet
           --code=3--another.parquet

我创建了一个文件列表,其中包含目录中所有文件的路径,然后执行

df = pq.ParquetDataset(file_list, filesystem=fs).read().to_pandas()

除了数据框 df 中不存在分区列代码外,一切正常。 我也尝试过使用 file_list 的 MyDirectory 的一个路径,但发现错误 “在中间目录中找到文件:s3://bucket/Mydirectoty”,我在网上找不到任何答案。

谢谢!

【问题讨论】:

    标签: pandas amazon-s3 parquet pyarrow


    【解决方案1】:

    AWS 有一个项目 (AWS Data Wrangler) 帮助集成 Pandas/PyArrow 及其服务。

    这个 sn-p 应该可以工作:

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

    【讨论】:

      【解决方案2】:

      如果您对其他工具感到满意,可以试试dask。假设您要读取的所有数据都在s3://folder 中,您可以使用

      import dask.dataframe as dd
      storage_options = {
                  'key': your_key,
                  'secret': your_secret}
      df = dd.read_parquet("s3://folder",
                           storage_options=storage_options)
      

      【讨论】:

      • 我测试了 byt dd.read_parquet 读取单个 parquet 文件,并且无法读取分区数据集,
      猜你喜欢
      • 2018-06-08
      • 1970-01-01
      • 2021-11-21
      • 2019-10-27
      • 2017-12-18
      • 1970-01-01
      • 2017-04-01
      • 2019-06-26
      • 2018-01-29
      相关资源
      最近更新 更多