-
Notifications
You must be signed in to change notification settings - Fork 4k
Description
When currently saving a ParquetDataset from Pandas, we don't get consistent schemas, even if the source was a single DataFrame. This is due to the fact that in some partitions object columns like string can become empty. Then the resulting Arrow schema will differ. In the central metadata, we will store this column as pa.string whereas in the partition file with the empty columns, this columns will be stored as pa.null.
The two schemas are still a valid match in terms of schema evolution and we should respect that in
arrow/python/pyarrow/parquet.py
Line 754 in 79a2207
| def validate_schemas(self): |
pa.Schema.equals in arrow/python/pyarrow/parquet.py
Line 778 in 79a2207
| if not dataset_schema.equals(file_schema, check_metadata=False): |
pa.Schema.can_evolve_to that is more graceful and returns True if a dataset piece has a null column where the main metadata states a nullable column of any type.
Related issues:
- [Python][Parquet][C++] Null values in a single partition of Parquet dataset, results in invalid schema on read (is related to)
- [Python][C++][Parquet] Support reading Parquet files having a permutation of column order (is related to)
- [Python][Dataset] Support using dataset API in pyarrow.parquet with a minimal ParquetDataset shim (depends upon)
- [C++][Dataset] Support null -> other type promotion in Dataset scanning (depends upon)
Original Issue Attachments:
Note: This issue was originally created as ARROW-2659. Please see the migration documentation for further details.