[ 
https://issues.apache.org/jira/browse/SPARK-57415?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Ismaël Mejía updated SPARK-57415:
---------------------------------
    Description: 
Umbrella tracking a series of performance improvements to the Parquet 
vectorized reader in Spark SQL. The changes target allocation reduction, 
bulk-read optimizations, and JIT-friendly code patterns across multiple 
encoding paths.

All subtasks are independent and can be reviewed/merged in any order. Together 
they yield significant throughput gains (1.2x to 9x depending on the encoding 
and data shape) for Parquet reads with no user-facing behavioral changes.

Common themes:
- Allocation reduction: Replace per-value ByteBuffer.slice() / 
ByteBuffer.wrap() with bulk reads into reusable buffers
- Bulk vectorized reads: Replace per-element virtual dispatch with single batch 
calls backed by System.arraycopy
- JIT-friendly patterns: Per-class method overrides for monomorphic call sites; 
avoiding megamorphic profile pollution

Benchmarks run on AMD EPYC 7763 with OpenJDK 17/21/25 via GHA workflow.

GitHub tracking issue: https://github.com/apache/spark/issues/56011

  was:
Umbrella tracking a series of performance improvements to the Parquet 
vectorized reader in Spark SQL. The changes target allocation reduction, 
bulk-read optimizations, and JIT-friendly code patterns across multiple 
encoding paths.

All subtasks are independent and can be reviewed/merged in any order. Together 
they yield significant throughput gains (1.2x to 9x depending on the encoding 
and data shape) for Parquet reads with no user-facing behavioral changes.

Subtasks:
 - SPARK-56892: Bulk read optimization for Parquet DELTA_BINARY_PACKED decoding 
(up to 9.0x)
 - SPARK-56893: Optimize Parquet dictionary decoding with hasNull fast path and 
per-class updater overrides (1.24x)
 - SPARK-56894: Add vectorized Parquet BYTE_STREAM_SPLIT reader (2.8-4.5x)
 - SPARK-56895: Batch ByteBuffer slice in RLE PACKED decode to reduce 
allocation overhead (2.1-2.4x)
 - SPARK-56896: Add bulk read paths for timestamp/date Parquet vector updaters 
(2.0-2.6x)
 - SPARK-56897: Reduce per-value allocations in DELTA_BYTE_ARRAY Parquet 
decoder (1.1-1.9x)
 - SPARK-56907: Reduce per-value allocation in DELTA_LENGTH_BYTE_ARRAY Parquet 
vectorized reader (1.2-1.4x)

Common themes:
 - Allocation reduction: Replace per-value ByteBuffer.slice() / 
ByteBuffer.wrap() with bulk reads into reusable buffers
 - Bulk vectorized reads: Replace per-element virtual dispatch with single 
batch calls backed by System.arraycopy
 - JIT-friendly patterns: Per-class method overrides for monomorphic call 
sites; avoiding megamorphic profile pollution

Benchmarks run on AMD EPYC 7763 with OpenJDK 17/21/25 via GHA workflow.

GitHub tracking issue: [https://github.com/apache/spark/issues/56011]


> Parquet vectorized reader performance improvements
> --------------------------------------------------
>
>                 Key: SPARK-57415
>                 URL: https://issues.apache.org/jira/browse/SPARK-57415
>             Project: Spark
>          Issue Type: Umbrella
>          Components: SQL
>    Affects Versions: 5.0.0
>            Reporter: Ismaël Mejía
>            Priority: Major
>              Labels: pull-request-available
>
> Umbrella tracking a series of performance improvements to the Parquet 
> vectorized reader in Spark SQL. The changes target allocation reduction, 
> bulk-read optimizations, and JIT-friendly code patterns across multiple 
> encoding paths.
> All subtasks are independent and can be reviewed/merged in any order. 
> Together they yield significant throughput gains (1.2x to 9x depending on the 
> encoding and data shape) for Parquet reads with no user-facing behavioral 
> changes.
> Common themes:
> - Allocation reduction: Replace per-value ByteBuffer.slice() / 
> ByteBuffer.wrap() with bulk reads into reusable buffers
> - Bulk vectorized reads: Replace per-element virtual dispatch with single 
> batch calls backed by System.arraycopy
> - JIT-friendly patterns: Per-class method overrides for monomorphic call 
> sites; avoiding megamorphic profile pollution
> Benchmarks run on AMD EPYC 7763 with OpenJDK 17/21/25 via GHA workflow.
> GitHub tracking issue: https://github.com/apache/spark/issues/56011



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to