gpt4 book ai didi

python - 如何控制 pyarrow.dataset.write_dataset 是否会覆盖以前的数据或追加到它?

转载 作者:行者123 更新时间:2023-12-04 01:04:10 25 4
gpt4 key购买 nike

我正在尝试使用 pyarrow.dataset.write_dataset将数据写入hdfs的函数。但是,如果我写入一个已经存在并且有一些数据的目录,则数据将被覆盖,而不是创建一个新文件。有没有一种方法可以方便地“附加”到已经存在的数据集,而不必先读取所有数据?我不需要将数据放在一个文件中,我只是不想删除旧文件。
我目前做什么和不做什么:

import pyarrow.dataset as ds
parquet_format = ds.ParquetFileFormat()
write_options = parquet_format.make_write_options(
use_deprecated_int96_timestamps = True,
coerce_timestamps = None,
allow_truncated_timestamps = True)
ds.write_dataset(data = data, base_dir = 'my_path', filesystem = hdfs_filesystem, format = parquet_format, file_options = write_options)

最佳答案

目前,write_dataset函数使用固定的文件名模板( part-{i}.parquet ,其中 i 是一个计数器,如果您正在编写多个批处理;如果编写单个表,i 将始终为 0)。
这意味着当多次写入同一个目录时,如果这些文件被命名为 part-0.parquet,它可能确实会覆盖预先存在的文件。 .
解决这个问题的方法是确保 write_dataset通过 basename_template 为每次写入使用唯一的文件名论据,例如:

ds.write_dataset(data=data, base_dir='my_path',
basename_template='my-unique-name-{i}.parquet', ...)
如果您想在每次写入时自动拥有一个唯一的名称,您可以例如生成一个随机字符串以包含在文件名中。一种选择是使用 python uuid标准库模块: basename_template = "part-{i}-" + uuid.uuid4().hex + ".parquet" .
另一种选择是在文件名中包含当前写入时间以使其唯一,例如 basename_template = "part-{:%Y%m%d}-{{i}}.parquet".format(datetime.datetime.now())https://issues.apache.org/jira/browse/ARROW-10695关于这个(自定义模板)的更多讨论,我开了一个专门关于静默覆盖数据问题的新问题: https://issues.apache.org/jira/browse/ARROW-12358

关于python - 如何控制 pyarrow.dataset.write_dataset 是否会覆盖以前的数据或追加到它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67071323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com