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
)
我有一个 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
)