Writer: nested List<Struct> columns are 5.5x larger than Rust's (masked wrappers at every level, uncompressed list offsets)

Aperta
#648 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
18/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
java, rust
Ambito
data, performance

Direzione di ricerca

The payload names no source files, so start by comparing one tags chunk from the Rust-written file with the Java-written file, splitting bytes into list offsets, struct elements and validity. The issue points at the vortex.masked wrappers on the list, struct and each field, and at list offsets that Rust run-end encodes but Java does not. Done means the per-child breakdown identifies which part causes the 5.5x gap, and the Java output size is brought close to Rust's on the same input.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

perf

Raincloud osm-germany-nodes, column tags (List<Struct<key: Utf8, value: Utf8>>), vortex-java's Parquet import vs the vortex-jni-written file, data bytes:

size typical chunk encoding
Rust 732.7 MB list(struct(dict(primitive, fsst(primitive, primitive)), dict(bitpacked, fsst(primitive, primitive))), runend(primitive, primitive))
Java 4,023.7 MB (5.5x) masked(list(masked(struct(masked(dict(bitpacked, fsst(...)), constant), masked(dict(bitpacked, fsst(...)), ...

+3.3 GB on this one column; the whole file is 18.4 GB vs Rust's 15.5 GB.

Visible differences in the trees:

  • vortex.masked wrappers on the list, the struct and each field, where Rust carries validity in the arrays themselves (as #604 did for integers; #646 for decimals);
  • Rust run-end encodes the list offsets (runend(primitive, primitive)); Java's offsets don't appear compressed that way.

To narrow down: per-child byte breakdown of one chunk in both files (offsets vs elements vs validity), and whether Java's chunks hold far fewer rows (Java wrote 1559+ chunks of the most common shape alone).

Lingua principale
Java
Stelle
3
Fork
2
Merge medio
9h 47m
PR unite (30g)
128

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di dfa1/vortex-java

Tutte le issue di dfa1/vortex-java

Issue simili

Altre issue su Java

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.