Skip to content

fix(spark): infer schemas from one footer by default - #105

Merged
ChristopherWirt merged 2 commits into
developfrom
cwirt/fix-issue-100
Nov 10, 2026
Merged

ChristopherWirt merged 2 commits into
developfrom
cwirt/fix-issue-100

Conversation

@ChristopherWirt

Copy link
Copy Markdown
Collaborator

Schema inference currently reads every Vortex footer on the driver before starting work. Default vortex.mergeSchema to false, so both V1 and V2 infer from one file. Datasets with evolving columns can explicitly opt into merging with vortex.mergeSchema=true; an explicit schema still skips inference. Update the Spark guide and API documentation to describe the new default and merging cost.

Preserve explicit merge coverage and add V1/V2 regression cases for omitted and false options, plus case-insensitive opt-in coverage.

Validation:

  • 52 targeted Spark 4.0 tests passed across VortexSchemaMergeTest, VortexDataSourceInferSchemaTest, VortexOptionsTest, VortexTableOptionsTest, and VortexSessionOptionsTest, using the baseline JNI library.
  • Confirmed the two omitted-option regression cases fail with the original default, while explicit false cases pass.
  • Scoped Spotless formatting and git diff --check passed.
  • Four independent complete-review perspectives (reuse, quality, efficiency, correctness) found no issues; their results were independently revalidated.

Fixes #100

Signed-off-by: Christopher Wirt <[email protected]>
(cherry picked from commit bfbc5bb)
Signed-off-by: Christopher Wirt <[email protected]>
@ChristopherWirt
ChristopherWirt merged commit 0f5a392 into develop Nov 10, 2026
1 check passed
ChristopherWirt added a commit that referenced this pull request Nov 10, 2026
## Summary

Fix the shared Linux musl builder failure on `develop` and PRs #103,
#105, #106, #107, and #108 after the upstream lazy-constructor update.

## Changes

Normalize lists rebuilt from list views through the same `reset_offsets`
path as ordinary lists before forwarding their children to layout
writers. Rebuilding a sliced list view can now leave a lazy elements
slice; a flat child writer cannot serialize that expression. This
preserves the existing referenced-element bounds and resolves the slice
without forcing unrelated encodings into canonical arrays.

Keep the existing nullable sliced-list-view regression and add the
non-nullable case.

## CI Failure Analysis

### Status

Pre-existing base-branch regression, independent of the individual PR
changes. The same failure appears on [develop run
42649358621](https://github.com/quantcast/vortex/actions/runs/42649358621)
and every completed failing PR builder inspected (#105–#108).

### Failed Jobs

- `Rust tests (linux-musl)`: test failure in
`layouts::list::reader::tests::sliced_list_chunks_round_trip::case_4_list_view_chunks`.

### Relevant Log Output

```text
Error: Array vortex.slice is not registered for serialization
```

### Correlation With PR Changes

The upstream merge makes array slicing lazy. The list-view branch of
`canonicalize_to_list_parts` forwarded a rebuilt list's lazy elements
directly, while the ordinary-list branch already normalized them. The
Spark PRs do not change this writer; #107 changes separate zone-pruning
code.

### Recommended Next Step

Merge this shared fix into `develop`. The same patch is being applied to
the affected open PR branches so their new builders include the fix
immediately.

## Validation

- Reproduced the exact failing test on unmodified current `develop`
(exit 100, same serialization error).
- `cargo nextest run -p vortex-layout -E 'test(layouts::list::)'`: all
161 tests passed after the fix, including the original failing case and
new non-nullable case.
- `cargo clippy -p vortex-layout --all-targets --all-features -- -D
warnings`: passed.
- Pinned nightly Rust formatting and `git diff --check`: passed.

Local validation ran on macOS; the fresh Linux musl builders will verify
the runner-specific job.

Signed-off-by: Christopher Wirt <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Schema inference reads every file's footer on the driver by default

1 participant