我可以使用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/