#python #parquet #pyarrow
#python #паркет #pyarrow
Вопрос:
Я понимаю, что можно сохранить category
тип при записи pandas DataFrame
в файл parquet, используя to_parquet
.
В начале, в моем случае, у меня уже есть pyarrow Table
. Могу ли я задать для одного из его столбцов category
тип? Если да, то как? (Я не смог найти подсказку в документации Google и pyarrow)
Спасибо за любую помощь! Лучшие,
Ответ №1:
В pyarrow категориальный тип называется «словарным типом». Массив pyarrow может быть преобразован в такой тип с помощью dictionary_encode()
метода:
>>> import pyarrow as pa
>>> table = pa.table({'a': ['A', 'B', 'A']})
>>> table.schema
a: string
>>> table.column('a')
<pyarrow.lib.ChunkedArray object at 0x7f1f94fb9938>
[
[
"A",
"B",
"A"
]
]
>>> table.column('a').dictionary_encode()
<pyarrow.lib.ChunkedArray object at 0x7f1f94fb9b48>
[
-- dictionary:
[
"A",
"B"
]
-- indices:
[
0,
1,
0
]
]
Затем изменить таблицу с помощью этого вновь закодированного столбца немного сложнее, но это можно сделать с помощью:
>>> table2 = table.set_column(0, "a", table.column('a').dictionary_encode())
>>> table2.schema
a: dictionary<values=string, indices=int32, ordered=0>
Комментарии:
1. Большое спасибо, Джорис! Возможно, есть ли способ сделать это при создании таблицы из массивов pyarrow?
2.
pa.table({'a': pa.array(['A', 'B', 'A'], pa.string()).dictionary_encode()})