Repository navigation
Conversation
…store 0.14 Point the DataFusion dependencies at a git revision of apache/datafusion main (350ca76505c9513d16e7dd9910bcd9bde2c911ed), which is on arrow/parquet 60.0.0 and object_store 0.14.2. Bump arrow, parquet, object_store and object_store_opendal (0.59.0, the first release on object_store 0.14) to match. iceberg-rust main is still on arrow 59, and the head of apache/iceberg-rust#3257 (Arrow 60) is 42 commits behind the main revision Comet builds against. Pin iceberg and iceberg-storage-opendal to a branch on the andygrove/iceberg-rust fork that merges apache/iceberg-rust main (1f3bc34) into that PR. Source changes for the new APIs: - Arrow 60 makes the FFI_ArrowArrayStream callbacks private, so the decimal-realignment test builds the import with from_ffi_and_data_type. - Parquet 60 moves the page index behind ParquetMetaData::page_index(), a PageIndexProvider with per-row-group access. - DataFusion's coerce_int96 and coerce_int96_tz are typed (DFTimeUnit, ConfigTimeZone) instead of strings. - OffsetBuffer::first/last return values and schema metadata is arrow's Metadata type. - HashJoinExec::with_dynamic_filter_expr, SortExec::with_dynamic_filter_expr, ExecutionPlan::with_preserve_order and ParquetAccessPlan::into_overall_row_selection are deprecated; allow them where Comet still needs them. - Arrow 60's MapBuilder names map children key/value by default, so make_map_c names them keys/values explicitly to keep exercising non-canonical names. - datafusion-spark's SparkXxhash64 now ignores the hidden children of a NULL struct and keeps the running hash for nested dictionaries (apache/datafusion #25774, #25813), so the tests that pinned those differences assert equality.
…ore its test Parquet 60 writes NaN min/max statistics for a float or double column chunk holding only NaN, and iceberg-rust copies them into the manifest bounds, where iceberg-java records none. Ignore the parity test that catches it, list the issue under the Iceberg known issues and add it to the 1.3.0 upgrade guide. It is tracked in #7242.
11 of 32 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Which issue does this PR close?
Part of #6410, which tracks the regressions this PR finds. The all-NaN Iceberg bound regression is tracked in #7242. This is a long-lived draft that follows DataFusion main until DataFusion 56.0.0 is released, and it is not meant to merge before then. Related: #5477, whose Arrow 60 items it unblocks.
This replaces #6404, moving the branch from a fork to
datafusion-56in this repository.Rationale for this change
DataFusion main is at
350ca76(2026-10-26). Since 55.1.0 it has moved to arrow/parquet 60.0.0 and object_store 0.14.2 (apache/datafusion#25335), and it has a number of API changes (see its 56.0.0 upgrade guide). Building Comet against main now surfaces the breaks early and lets CI run the Comet suites against it, rather than finding everything at release time.The branch is one commit on top of current
apache/main.What changes are included in this PR?
Dependencies
datafusion,datafusion-datasource,datafusion-functions,datafusion-physical-expr-adapteranddatafusion-sparkin the workspace now usegit = "https://github.com/apache/datafusion", rev = "350ca76...". So do thedatafusion-functions-nesteddev-dependency in core anddatafusionin both contrib crates.arrow,arrow-data,arrow-selectandparquetgo from 59.2.0 to 60.0.0.object_storegoes from 0.13.2 to 0.14.2.object_store_opendalgoes from 0.58.0 to 0.59.0, the first release on object_store 0.14. That release keeps opendal on 0.58, which is what iceberg-rust uses.icebergandiceberg-storage-opendalmove to8c8cf19, a branch on the andygrove/iceberg-rust fork.0d5eb12) is now 42 commits behind the main revision Comet builds against (1f3bc34), and Comet's Iceberg code uses APIs from those commits (FileMetadatafromclose, the publicFileScanTaskDeleteFilefields,OPENDAL_IO_TIMEOUT_MS). So the fork branch is build: reduce overhead of fuzz testing #3257's head with1f3bc34merged in. The merge had no conflicts.native/Cargo.lockandcontrib/delta/native/Cargo.lockare regenerated.Source changes (all forced by the upgrade)
FFI_ArrowArrayStreamcallbacks private, so the decimal-realignment test inscan.rscan no longer build a hand-rolled C stream. It now exports a struct array and imports it withfrom_ffi_and_data_type, the callArrowArrayStreamReader::nextmakes.AlignedArrowStreamReaderwas already gone on main.ParquetMetaData::page_index(), aPageIndexProviderwith per-row-group access.with_spark_arrow_schemaand the rebase footer rewrite carry it over withset_page_index.page_selection_bound_selectorsindelta_dv.rswalks the row groups throughpage_index_for_row_group.page_index()instead ofcolumn_index()/offset_index().coerce_int96andcoerce_int96_tzare now typed (DFTimeUnit,ConfigTimeZone) instead of strings.GetResult::extensions, whichScanIoObjectStore::get_optsnow forwards.OffsetBuffer::first()/last()now return values instead ofOptions.Metadatatype. The datetime rebase resolution reads it directly, and the shuffle schema cache's size estimate useslen()instead ofcapacity().fb_to_schemais deprecated. The shuffle decoder usestry_fb_to_schema, so an invalid schema message now returns a decode error where it used to panic.FFI_ArrowSchema::with_metadatais nowunsafe. The call inmove_to_sparkis sound because the schema was just built byTryFrom.#[allow(deprecated)]:HashJoinExec::with_dynamic_filter_exprandSortExec::with_dynamic_filter_expr, both with no replacement. Upstream installs a dynamic filter only fromhandle_child_pushdown_result(joins) ortry_from_proto(sorts).DynamicFilterJoinExecand the runtime top-K wiring set it directly. The deprecation note asks for an issue if you have a use case. Comet has one, so it is worth filing before the setters are removed.ExecutionPlan::with_preserve_order, which DataFusion no longer calls.MetricOwningExeckeeps forwarding it.ParquetAccessPlan::into_overall_row_selection, in threedelta_dv.rstests that model the reader's file-level selection peak. DataFusion now keeps row-group-local entries, so the deletion-vector admission bound should be rechecked against the new reader.normalize_spark_empty_key_metadata_rejects_other_malformed_encodings: Arrow 60 accepts empty entries in unsorted Variant dictionaries (Addproptestfuzzing to parquet-variant and implement fixes for findings arrow-rs#10352).make_map_cincomet-test-udfs: arrow 60'sMapBuildernames the map childrenkey/valueby default, so the test UDF now names themkeys/valuesexplicitly to keep exercising non-canonical names.datafusion-spark'sSparkXxhash64now ignores the hidden children of a NULL struct (fix: xxhash64 of a NULL struct ignores the struct fields datafusion#25774) and keeps the running hash for nested dictionaries (fix: keep the running hash for nested dictionaries in Spark xxhash64 datafusion#25813). Three tests inxxhash64_diff.rsthat pinned those differences now assert equality. Comet still keeps its own kernel for those types, so widening the routing is a possible follow-up.Known issue: all-NaN float and double columns in Iceberg manifests
Parquet 60 writes NaN min and max statistics for a column chunk that holds only NaN, and iceberg-rust copies them into the manifest bounds, where iceberg-java records none.
CometIcebergWriteActionSuite"native acceleration: NaN float/double manifest metrics match the JVM writer" caught it, so this PR ignores that test, links #7242 and lists the issue under the Iceberg known issues and in a new 1.3.0 section of the upgrade guide. Re-enable the test once iceberg-rust skips NaN bounds.DataFusion behavior changes checked against Comet
floor/ceilreturn types and the result ofmap_extractfor absent keys changed. Comet registers its ownfloor,ceilandmap_extract, so neither change reaches Comet.Not included (possible follow-ups)
proptestfuzzing to parquet-variant and implement fixes for findings arrow-rs#10352, so the encoded-metadata decoding and the empty-key retry (canonicalize_spark_empty_key_metadata) can now be removed.stackonce feat: support Spark-compatiblestackfunction datafusion#26266 is in the pinned revision. It is now (6489d15).How are these changes tested?
Run locally on macOS aarch64, against the lockfile in this PR:
cargo fmt --check,cargo clippy --all-targets --workspace -- -D warnings, thepython-udfandjemallocclippy runs,cargo check --benches,cargo check -p datafusion-comet --all-targets --features contrib-delta,contrib-lanceandcargo macheteare all clean.cargo nextest runinnative/: 2666 tests run, 2661 passed, 5 failed. All five areparquet::objectstore::http_metricstests that bind a loopback socket, which this machine refuses (Operation not permitted), so CI is the check for them.cargo nextest run -p datafusion-comet --lib --features jemalloc alloc_accounting: 5 passed.Not run:
python-udftests, because pyarrow could not be installed here.run-all-spark-profiles,run-spark-4.1-testsandrun-iceberg-testslabels.