【发布时间】:2020-10-06 01:01:57
【问题描述】:
我正在使用 Python 编写代码,并希望使用 PyArrow 生成 Parquet 文件。
根据我的理解和the Implementation Status,C++ (Python) 库已经实现了 MAP 类型。从the Data Types,也可以找到类型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 中):
-
使用 MAP 数据类型生成 Parquet 文件的最佳方法是什么(如果可以附上示例,那就太好了)
-
我知道我们可以使用
STRUCT来模拟地图结构。但是由于 Parquet 提供了 MAP 类型,我们仍然想使用它。如果无法生成 MAP 数据类型,那么提供 MAP 类型的原因是什么?
【问题讨论】:
标签: python pyarrow apache-arrow