page/row-group pruning and in-scan deletion vectors; benchmarked at 1 TB, on par with raw parquet
Read the write-upOpen Source
Merged pull requests to Apache DataFusion Comet, DataFusion, Spark and dataconf, plus the libraries I publish.
/* git log --author=dwsmith1983 --merged */
Featured
read the shuffle natively in operators AQE reuses from the initial plan
~2x faster aggregate reduce stages on many-map-task shuffles, on par with Spark
cache parsed plan data across a stage's tasks
~5x lower per-task planning cost
resolve Azure ABFS authentication through Hadoop and keep ambient credentials out
agrees with Hadoop in 137/137 ABFS auth parity cases; env vars no longer override configured credentials
keep unconverted DPP filters in a scan's canonical form
different DPP filters on one table no longer share an AQE exchange; a q64-shaped query returns Spark's 400 rows instead of 100
skip wasted per-batch work in TopK insert_batch
38% less TopK compute on expression sort keys
Apache DataFusion Comet 41 merged
keep URL passwords and SAS queries out of Azure and object store errors, keys and logs
end the Delta scan's plan-data key with its plan id
fall back when an outer hash join's streamed order cannot be checked
label Delta pull requests with area:Delta
read each native scan partition through the object store its files live in
give each nondeterministic dispatched expression its own kernel
honor subexpression elimination off in the native null short-circuit
read fs.comet.libhdfs.schemes for the scan rule from the Hadoop conf
fall back to Spark for NOT IN over an ordered streamed side
keep unconverted DPP filters in a scan's canonical form
different DPP filters on one table no longer share an AQE exchange; a q64-shaped query returns Spark's 400 rows instead of 100add native Delta Lake scan contrib module (page/row-group pruning)
page/row-group pruning and in-scan deletion vectors; benchmarked at 1 TB, on par with raw parquetdo not resolve DPP subqueries when AQE reads a native scan's partitioning
expect Spark 3.5's empty LocalTableScan in the single-split DPP join test
run the S3 suites against an available MinIO image
cover container field ids next to INT96 timestamps in the native Parquet scan
resolve Azure ABFS authentication through Hadoop and keep ambient credentials out
agrees with Hadoop in 137/137 ABFS auth parity cases; env vars no longer override configured credentialsretry a native acquire that Spark failed after dropping the task's entry
retry a shuffle page allocation that Spark failed after dropping the task's entry
keep the sort-merge join when the forced hash join's build side is too large
load the Iceberg storage scheme lists from the native factory
cover sequence's per-batch element limit and the batch size remedy
convert native ReadAncientDatetime errors to SparkUpgradeException
add native metrics from every plan a task runs instead of keeping the last
read the shuffle natively in operators AQE reuses from the initial plan
~2x faster aggregate reduce stages on many-map-task shuffles, on par with Sparkkey each scan's planning data by its plan node in a native block
check Iceberg DPP pruning by planned file tasks
reject a file without field ids at any depth whether or not id matching is on
matches Spark's missing field-id check at any depthreport task input metrics after the native iterator closes and add to Spark's counters
match Spark's duplicate field and field id semantics in parquet field lookup
matches Spark's field-id semantics for nested fieldslet decimal SUM recover from an intermediate overflow like Spark
matches Spark when an intermediate sum overflowsgate the regr_r2 degenerate-case swap on the Spark patch release
guard page skipping in the native Iceberg scan
run length on binary input natively
drop the redundant width_bucket shim registrations and guard serde uniqueness
cache parsed plan data across a stage's tasks
~5x lower per-task planning costreuse zstd compression contexts across shuffle blocks
~6% faster shuffle encodedecline structs with duplicate field names before they reach Java Arrow
compile user regex patterns once per planned expression
2.1x faster on small batcheslabel pull requests by changed paths and title prefix
expand object store option references, uniquify constant metadata names, drop dead parquet JNI
306 lines of dead JNI removedreuse per-partition scratch in the shuffle write path
27% faster writes at 2,000 partitionsApache DataFusion 8 merged
build the hash join hash map from the concatenated build batch
keep build-side input order across batches in hash join
charge semi/anti sort-merge join key groups by their sliced size
normalize float hash join build keys once
3.7x faster float-key hash joins with large build sidesskip functional dependency work when inputs carry none
up to 25% faster logical planning on wide selectsstop redoing per-chunk setup on the hash join probe path
28% faster high-fanout float-key joinspreserve field metadata when coercing INT96 timestamps (branch-55 backport)
skip wasted per-batch work in TopK insert_batch
38% less TopK compute on expression sort keysApache Spark 2 merged
SPARK-54593: enable DPP for materialized filtering sides
proposed the design; credited in the merged implementationrevisions for spark sql performance tuning to improve readability and grammar
updated some grammar and a missed period in the tuning doc