从用C++编写的文件中读回字段中的KeyValueMetadata和yarrow中的架构 [英] Readback KeyValueMetadata from Field and Schema in pyarrow from file written in C++
本文介绍了从用C++编写的文件中读回字段中的KeyValueMetadata和yarrow中的架构的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如果我使用脚本simple-write-parquet.cpp编写一个简单的Parquet文件,我希望得到一个只有一个列的简单Parquet文件MyInt
。脚本simple-write-parquet.cpp尝试使用一些伪值将KeyValueMetadata
添加到字段MyInt
。在C++代码中,如果我这样做,
std::cout << field->ToString(true) << std::endl;
我看到了预期回报。
...
-- metadata --
foo: bar
bar: foo
我希望此元数据将保留在输出拼图文件中。
但是,当我尝试使用pyarrow
读回此文件时,此字段元数据键-值对似乎不存在:
import pyarrow as pa
import pyarrow.parquet as pq
table = pq.read_table("test.parquet")
field = table.field("MyInt")
field.metadata # None!
有没有办法从pyarrow
中检索KeyValueMetadata
从C++端附加到字段和架构(例如,通过WithMetadata
方法)的pyarrow
将拼图文件写出到磁盘?
推荐答案
看起来默认情况下不保存元数据。尝试在ArrowWriterProperties
store_schema
void write_parquet_file(const arrow::Table& table)
{
std::shared_ptr<arrow::io::FileOutputStream> outfile;
PARQUET_ASSIGN_OR_THROW(outfile, arrow::io::FileOutputStream::Open("test.parquet"));
PARQUET_THROW_NOT_OK(parquet::arrow::WriteTable(
table,
arrow::default_memory_pool(),
outfile,
3,
parquet::default_writer_properties(),
parquet::ArrowWriterProperties::Builder().store_schema()->build()));
}
它应该可以工作:
>>> table.field('MyInt').metadata
{b'PARQUET:field_id': b'1', b'bar': b'foo', b'foo': b'bar'}
请注意,拼图还添加了一些您必须过滤掉的元数据。
这篇关于从用C++编写的文件中读回字段中的KeyValueMetadata和yarrow中的架构的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文