Vinod KC created SPARK-60490:
--------------------------------

             Summary: Fix vectorized Parquet reader when a PLAIN page is 
followed by a dictionary page in a batch
                 Key: SPARK-60490
                 URL: https://issues.apache.org/jira/browse/SPARK-60490
             Project: Spark
          Issue Type: Bug
          Components: SQL
    Affects Versions: 4.2.0, 4.0.0, 4.1.0, 3.5.0, 4.3.0, 5.0.0
            Reporter: Vinod KC


The vectorized Parquet reader can return wrong results or fail with an 
{{ArrayIndexOutOfBoundsException}} when, within one batch, a dictionary-encoded 
data page follows a PLAIN-encoded data page of the same column chunk.

The Parquet format allows a column chunk to mix dictionary-encoded and PLAIN 
data pages in any order. parquet-mr's fallback from dictionary to PLAIN is 
permanent for the column chunk, so files written by Spark don't hit this, but 
other writers do.

For example, files written by Snowflake Openflow contain a list element column 
of a shredded variant with the page sequence {{{}RLE_DICTIONARY -> PLAIN -> 
RLE_DICTIONARY{}}}.

*Symptoms*
 * Silently wrong values, e.g. {{sum(aggregate(tags, 0L, (a, x) -> a + x))}} 
returns {{31228268}} instead of {{{}31232468{}}}.
 * For repeated (array/map) columns, a failure such as:
{noformat}
java.lang.ArrayIndexOutOfBoundsException: arraycopy: last destination index 
30504 out of bounds for int[3100]
  at org.apache.spark.sql.execution.vectorized.OnHeapColumnVector.putInts
  at 
org.apache.spark.sql.execution.datasources.parquet.VectorizedRleValuesReader.readIntegersRepeated
  ...
{noformat}
With off-heap column vectors 
({{{}spark.sql.columnVector.offheap.enabled=true{}}}), 
{{OffHeapColumnVector.putInts}} has no bounds check, so this overflow writes 
past the allocated native memory instead of throwing.

Setting {{spark.sql.parquet.enableNestedColumnVectorizedReader=false}} avoids 
the problem only for scans that read nested columns. Scans of only flat columns 
stay vectorized and can still return wrong results.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

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

Reply via email to