python - 使用分区列写入 Pandas Dataframe parquet 元数据

标签 python pandas dataframe metadata pyarrow

我可以使用partition_cols编写 Parquet 文件,但不能使用相应的元数据。由于我的分区中的列,表与元数据似乎存在架构不匹配。

需要一些帮助来解决我做错的事情 -

代码,

df = pd.DataFrame(dictReprForDf)

table=pa.Table.from_pandas(df)

metadata_collector=[]

pq.write_to_dataset(table, outputFilePath, metadata_collector=metadata_collector, partition_cols=['A','B','C'])

pq.write_metadata(table.schema, outputFilePath+'/_common_metadata')

pq.write_metadata(table.schema, outputFilePath+'/_metadata',metadata_collector=metadata_collector)

错误:

File "pyarrow\_parquet.pyx", line 616, in pyarrow._parquet.FileMetaData.append_row_groups
RuntimeError: AppendRowGroups require equal schema

值得注意的是,如果我不在 pq.write_to_dataset 上设置partition_cols,则此代码可以工作/不会出现错误。

最佳答案

通过检查how they do this in dask找到了解决方案.

root_path = Path("partitioned_data")
metadata_collector = []
partition_cols = ["partition_col1", "partition_col2"]

subschema = table.schema

for col in partition_cols:
    subschema = subschema.remove(subschema.get_field_index(col))

pa.parquet.write_to_dataset(
    table, root_path=root_path, partition_cols=partition_cols,
    metadata_collector=metadata_collector,
)

pq.write_metadata(subschema, root_path / "_common_metadata")
pq.write_metadata(subschema, root_path / "_metadata", metadata_collector=metadata_collector)

关于python - 使用分区列写入 Pandas Dataframe parquet 元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68277701/

相关文章:

python - Pandas groupby 和rolling 返回不同的结果

python - 如果单独的值与 Pandas 中的列表匹配,则更新单元格值

python - 在桌面应用程序中运行嵌入式 Web 服务器的推荐方式是什么(比如带有 pyqt 的 wsgi 服务器)

python - 在 python 包中包含外部二进制文件

python - 在python中对多行字符串进行分区

Python:理解具有两个变量的 lambda 表达式

pandas - 如何有条件地替换pandas数据框

python - 在 matplotlib 中获取每周时间序列数据的异常折线图

python - 在Python中使用 bool 逻辑隔离pandas列

r - 在以逗号分隔的其他列中添加该列的位置列