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

Aberta
#648 0 comentários 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
4/5
Tempo estimado
3-5 dias
Facilidade para iniciantes
18/100
Tipo de issue
Bug
Clareza
Razoavelmente clara
Status de atividade
Ativa
Stack de tecnologia
java, rust
Domínio
data, performance

Direção de pesquisa

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.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

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).

Linguagem predominante
Java
Estrelas
3
Forks
2
Merge médio
9h 47min
PRs com merge (30d)
128

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de dfa1/vortex-java

Todas as issues de dfa1/vortex-java

Issues semelhantes

Mais issues de Java

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.