【问题标题】:Is there a way to incrementally update Dask metadata file?有没有办法增量更新 Dask 元数据文件?
【发布时间】:2021-01-27 03:50:34
【问题描述】:

我正在尝试处理数据集并在 Dask 中进行增量更新。 Dask 元数据文件在重新读取处理后的数据时会有很大帮助。但是,当我将新的分区/子集写入同一路径时,那里的元数据会被新的分区/子集覆盖,而不是在包含它们的情况下进行更新。

import dask.dataframe as dd

df = dd.read_parquet(read_path)
# some transformations
df = …
df.to_parquet(write_path, partition_on=[col1, col2, …], write_metadata_file=True)

看了几个地方,还没有找到明显的方法来做到这一点。有谁知道是否有人做过处理这种用例的事情?可以增量更新元数据文件或对其中的一些文件进行编辑/组合。任何建议将不胜感激。

【问题讨论】:

    标签: dask dask-distributed fastparquet dask-dataframe


    【解决方案1】:

    Dask 的 to_parquet() 方法有一个 append 模式,我认为这正是你想要的:

    append : bool, optional
    
        If False (default), construct data-set from scratch.
        If True, add new row-group(s) to an existing data-set.
        In the latter case, the data-set must exist, and the schema must match the input data.
    
    

    我已经成功使用了pyarrow引擎,版本1.0.1

    【讨论】:

    • 谢谢!我试过使用append。虽然它会增量更新分区/子集,但它不会增量更新_metadata 文件,这是我希望做的。即使在 append 模式下,_metadata 也会被覆盖。
    • 嗯,我使用附加模式导致元数据文件被正确更新。你用什么引擎?我使用pyarrow 没有任何问题。
    • 要明确一点 - _metadata 文件将始终被覆盖,但我理解您的意思是在执行 append 之后新的 _metadata 文件会忽略预先存在的分区?跨度>
    • 我使用的是fastparquet。是的,我的意思是新的_metadata 文件将忽略预先存在的分区,而不是将新分区添加到预先存在的分区中。需要明确的是,在使用 pyarrow 引擎时,您是否让它正常工作(即 _metadata 被目录中的所有分区一致地覆盖)?
    • 是的,我已经测试写入/附加/读取了许多数据集,并且每次都对我有用,使用 pyarrow==1.0.1
    【解决方案2】:

    此问题特定于 fastparquet 引擎(在 pyarrow 中运行良好)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-11
      • 2021-10-26
      • 2013-01-25
      • 1970-01-01
      • 2020-01-22
      • 1970-01-01
      • 1970-01-01
      • 2015-01-09
      相关资源
      最近更新 更多