#python #pyarrow #apache-arrow
#python #pyarrow #apache-стрелка
Вопрос:
Я пишу на Python и хотел бы использовать PyArrow для создания файлов Parquet.
Согласно моему пониманию и состоянию реализации, библиотека C (Python) уже реализовала тип КАРТЫ. Из типов данных я также могу найти тип map_(key_type, item_type[, keys_sorted])
.
Итак, я протестировал несколько разных подходов в Python / PyArrow. Но все они потерпели неудачу.
Например.:
df = pd.DataFrame({
'col1': pd.Series([
[('key', 'aaaa'), ('value', '1111')],
[('key', 'bbbb'), ('value', '2222')],
]),
'col2': pd.Series(['foo', 'bar'])
}
)
udt = pa.map_(pa.string(), pa.string())
schema = pa.schema([pa.field('col1', udt), pa.field('col2', pa.string())])
table = pa.Table.from_pandas(df, schema)
pq.write_table(table, FILE_NAME)
Когда я прочитал файл с parquet-tools cat rand_gen_test_map.parquet
помощью, я получил:
col1:
.key_value:
.key_value:
col2 = foo
col1:
.key_value:
.key_value:
col2 = bar
Мне кажется, что значения карты выводятся неправильно (или пропущены). Хотя схема правильная:
message schema {
optional group col1 (MAP) {
repeated group key_value {
required binary key (UTF8);
optional binary value (UTF8);
}
}
optional binary col2 (UTF8);
}
В целом, у меня есть два вопроса (все на Python):
-
каков наилучший способ создания файлов Parquet с типом данных КАРТЫ (если будет здорово, если пример может быть прикреплен)
-
Я понимаю, что мы можем использовать a
STRUCT
для имитации структуры карты. Но поскольку Parquet предоставил тип карты, мы все равно хотим его использовать. Если тип данных КАРТЫ не может быть сгенерирован, в чем причина предоставления типа КАРТЫ?
Ответ №1:
Произошла ошибка при написании типов карт. Это должно быть исправлено в pyarrow 2.0 (также чтение теперь поддерживается изначально)
Комментарии:
1. спасибо @micah-kornfield, новая версия действительно решила проблему для меня. очень признателен!
2. обратите внимание, что в версии 2.0 также были некоторые ошибки, к сожалению, в версии 3.0, надеюсь, они все исправлены.