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

ASF GitHub Bot updated SPARK-60788:
-----------------------------------
    Labels: pull-request-available  (was: )

> Parquet nested schema pruning can misread two-level LISTs and return values 
> for missing field IDs
> -------------------------------------------------------------------------------------------------
>
>                 Key: SPARK-60788
>                 URL: https://issues.apache.org/jira/browse/SPARK-60788
>             Project: Spark
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 3.5.9, 4.3.0, 4.2.1, 4.0.5, 4.1.4
>            Reporter: Chao Sun
>            Priority: Major
>              Labels: pull-request-available
>
> h3. Description
> Spark can misread a two-level Parquet LIST of structs after nested schema 
> pruning reduces its element to one field. The clipped physical schema can 
> look identical to a three-level LIST of primitives, even though the two 
> encodings require different interpretations.
> There is a related wrong-result case when field-ID reads are enabled. The row 
> reader can return values from a physical field that has the requested name 
> but a different field ID.
> h3. Reproduction
> # Write a two-level Parquet LIST named {{legacy}} whose repeated group 
> contains two integer fields: {{sibling}} with field ID 18 and {{wanted}} with 
> field ID 17.
> # Write two elements with values {{(10, 11)}} and {{(20, 22)}}.
> # Enable {{spark.sql.optimizer.nestedSchemaPruning.enabled}} and 
> {{spark.sql.parquet.fieldId.read.enabled}}.
> # Supply a read schema that requests field ID 17 as {{renamed}} and requests 
> {{sibling}} with field ID 19. ID 19 does not exist in the file.
> # Read the following projections separately.
> ||Projection||Expected||Actual on Spark master||
> |{{legacy[1].renamed}}|{{22}}|Fails with a Parquet column type mismatch in 
> both the row and vectorized readers.|
> |{{legacy.sibling}}|{{[NULL, NULL]}}|The row reader returns {{[10, 20]}}. The 
> vectorized reader returns {{[NULL, NULL]}}.|
> The row reader reads a physical field to distinguish a null parent from a 
> present parent. When that field has a different ID from the requested field, 
> its values should not appear in the result.
> h3. References
> * [Standalone fix and regression tests, Spark PR 
> #59997|https://github.com/apache/spark/pull/59997]
> * [Original review 
> report|https://github.com/apache/spark/pull/59972#discussion_r4433280742]



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