Я пытаюсь использовать следующую примерную схему документа из бумаги Dremel Dremel: интерактивный анализ наборов данных веб-масштаба :
message Document {
required int64 DocId;
optional group Links {
repeated int64 Backward;
repeated int64 Forward;
}
repeated group Name {
repeated group Language {
required string Code;
optional string Country;
}
optional string Url;
}
}
для сохранения документа в формате файла Apache Parquet с использованиемpyarrow.Я пытаюсь реализовать следующее:
import pyarrow as pa
import pyarrow.parquet as pq
links_type = pa.struct([
pa.field("backward", pa.list_(pa.int64())),
pa.field("forward", pa.list_(pa.int64())),
])
language_type = pa.struct([
pa.field("code", pa.string(), nullable=False),
pa.field("country", pa.string())
])
names_type = pa.struct([
pa.field("language", pa.list_(language_type)),
pa.field("url", pa.string()),
])
document_type = pa.struct([
pa.field("doc_id", pa.int64(), nullable=False),
pa.field("links", links_type, nullable=True),
pa.field("name", pa.list_(names_type))
])
r1 = {
"doc_id": 10,
"links": {
"forward": [20, 40, 60]
},
"name": [
{
"language": [
{
"code": "en_us",
"country": "us"
},
{
"code": "en"
}
],
"url": "http://A"
},
{
"url": "http://B"
},
{
"language": [
{
"code": "en-gb",
"country": "gb"
}
]
}
]
}
r2 = {
"doc_id": 20,
"links": {
"forward": [80],
"backward": [10, 30],
},
"name": [
{
"url": "http://C"
}
]
}
records = pa.array([r1,r2], document_type)
batch = pa.RecordBatch.from_arrays([records], names=["documents"])
table = pa.Table.from_batches([batch])
pq.write_table(table, "dremel_pyarrow.parquet")
Но эта программа заканчивается исключением из-за pq.write_table(table, "dremel_pyarrow.parquet")
и ошибки сегментации:
self.writer.write_table(table, row_group_size=row_group_size)
File "pyarrow/_parquet.pyx", line 934, in pyarrow._parquet.ParquetWriter.write_table
File "pyarrow/error.pxi", line 81, in pyarrow.lib.check_status
pyarrow.lib.ArrowInvalid: Nested column branch had multiple children
Segmentation fault (core dumped)
Поэтому мне любопытно, можно ли воспроизвестиПример бумаги дремеля в пиарроу?