PyArrow 数据集缺少新数据

PyArrow dataset missing new data

我有一个 python 进程使用 Pyarrow=6.0.0 将数据写入 parquet 文件。我初始化一个 PyArrow 数据集:

import pyarrow.dataset as ds

root_directory = "bucket_name_in_gcp"
fs = gcsfs.GCSFileSystem(project=project)
pa_fs = PyFileSystem(FSSpecHandler(fs))
self.partitions = ds.partitioning(pyarrow.schema([("item_id", pyarrow.string()), ("group", pyarrow.string())]), flavor="hive")

dataset = ds.dataset(source=root_directory, filesystem=fs, partitioning=partitions, format="parquet")

稍后在我使用的代码中

item_id_condition = ds.field("item_id") == "xxx"
group_condition = ds.field("group") == "group_1"
filters = item_id_condition & group_condition

results = dataset.to_table(filter=filters).to_pandas()

从存储中读取数据,我得到一个空数据帧,这很好。

以后我用:

file_path = f'{root_directory}/item_id=xxx/group=group_1'

with pyarrow.BufferOutputStream() as output_buffer:
    parquet.write_table(table, output_buffer)
    parquet_bytes = output_buffer.getvalue().to_pybytes()
    with pa_fs.open_output_stream(str(file_path)) as stream:
        stream.write(parquet_bytes)

将 table 数据写入存储,此时我可以查看文件及其内容。

但是如果我再次尝试使用读取函数 (dataset.to_table),我仍然会得到一个空数据帧。为什么 PyArrow 数据集无法识别新文件? 如果我将重新创建 ds.dataset 对象,它将识别所有现有数据

我错过了什么吗?有没有办法 refresh 数据集?或者我每次都需要初始化它?

我想你需要 运行

dataset = ds.dataset(source=root_directory, filesystem=fs, partitioning=partitions, format="parquet")

再试一次,然后它应该可以识别新文件。如果我理解正确,必须以这种方式“刷新”与 gcsfs filesystem 的连接(如您所说,re-creating ds.dataset