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

Ismaël Mejía updated SPARK-56896:
---------------------------------
    Description: 
Replaces per-element {{readValue}} loops with two-pass bulk read + in-place 
conversion for timestamp and date Parquet vector updaters.

h3. Changes

* *Bulk read + convert*: For each updater, first read all raw long/int values 
in a single batch call, then convert in-place (e.g. rebase, 
microseconds-to-nanoseconds).
* *Updaters optimized*: {{LongAsMicrosUpdater}}, {{LongAsNanosUpdater}}, 
{{LongAsMicrosRebaseUpdater}}, {{DateToTimestampNTZWithRebaseUpdater}}.
* Avoids per-element virtual dispatch through {{VectorizedValuesReader}}.

Note: {{DateToTimestampNTZUpdater}} (CORRECTED mode) was already optimized via 
SPARK-56804.

h3. Benchmark Results (GHA, AMD EPYC 7763)

||Updater||Speedup (JDK 17 / JDK 21 / JDK 25)||
|LongAsMicrosUpdater|2.1x / 2.9x / 3.3x|
|LongAsNanosUpdater|~2.6x (local runs)|
|LongAsMicrosRebaseUpdater|~2.1x (local runs)|
|DateToTimestampNTZWithRebaseUpdater|~2.0x (local runs)|

PR: https://github.com/apache/spark/pull/55923
Parent issue: https://github.com/apache/spark/issues/56011

> Add bulk read paths for timestamp/date Parquet vector updaters
> --------------------------------------------------------------
>
>                 Key: SPARK-56896
>                 URL: https://issues.apache.org/jira/browse/SPARK-56896
>             Project: Spark
>          Issue Type: Sub-task
>          Components: SQL
>    Affects Versions: 5.0.0
>            Reporter: Ismaël Mejía
>            Assignee: Ismaël Mejía
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 4.3.0
>
>
> Replaces per-element {{readValue}} loops with two-pass bulk read + in-place 
> conversion for timestamp and date Parquet vector updaters.
> h3. Changes
> * *Bulk read + convert*: For each updater, first read all raw long/int values 
> in a single batch call, then convert in-place (e.g. rebase, 
> microseconds-to-nanoseconds).
> * *Updaters optimized*: {{LongAsMicrosUpdater}}, {{LongAsNanosUpdater}}, 
> {{LongAsMicrosRebaseUpdater}}, {{DateToTimestampNTZWithRebaseUpdater}}.
> * Avoids per-element virtual dispatch through {{VectorizedValuesReader}}.
> Note: {{DateToTimestampNTZUpdater}} (CORRECTED mode) was already optimized 
> via SPARK-56804.
> h3. Benchmark Results (GHA, AMD EPYC 7763)
> ||Updater||Speedup (JDK 17 / JDK 21 / JDK 25)||
> |LongAsMicrosUpdater|2.1x / 2.9x / 3.3x|
> |LongAsNanosUpdater|~2.6x (local runs)|
> |LongAsMicrosRebaseUpdater|~2.1x (local runs)|
> |DateToTimestampNTZWithRebaseUpdater|~2.0x (local runs)|
> PR: https://github.com/apache/spark/pull/55923
> Parent 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