apache / apache/parquet-java

Empty projection returns the wrong number of rows when column index is enabled

Ouverte
#2,702 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub
Component: Java Component: Parquet Priority: Major Type: bug
Langage dominant
Java
Étoiles
3.1k
Forks
1.6k
Merge moyen
3 j 12 h
PR mergées (30 j)
33

Description

Discovered in Spark, when returning an empty projection from a Parquet file with filter pushdown enabled (typically when doing filter + count), Parquet-Mr returns a wrong number of rows with column index enabled. When the column index feature is disabled, the result is correct.

 

This happens due to the following:
1. ParquetFileReader::getFilteredRowCount() ( selects row ranges to calculate the row count when column index is enabled.
1. In ColumnIndexFilter ( we filter row ranges and pass the set of paths which in this case is empty.
1. When evaluating the filter, if the column path is not in the set, we would return an empty list of rows ([https://github.com/apache/parquet-mr/blob/0819356a9dafd2ca07c5eab68e2bffeddc3bd3d9/parquet-column/src/main/java/org/apache/parquet/internal/filter2/columnindex/ColumnIndexFilter.java#L178)](https://github.com/apache/parquet-mr/blob/0819356a9dafd2ca07c5eab68e2bffeddc3bd3d9/parquet-column/src/main/java/org/apache/parquet/internal/filter2/columnindex/ColumnIndexFilter.java#L178).) which is always the case for an empty projection.
1. This results in the incorrect number of records reported by the library.

I will provide the full repro later.

 

 

**Reporter**: [Ivan Sadikov](https://issues.apache.org/jira/secure/ViewProfile.jspa?name=ivan.sadikov)
#### Related issues:
- [Filtered parquet data frame count() and show() produce inconsistent results when spark.sql.parquet.filterPushdown is true](https://issues.apache.org/jira/browse/SPARK-39833) (is related to)

**Note**: *This issue was originally created as [PARQUET-2170](https://issues.apache.org/jira/browse/PARQUET-2170). Please see the [migration documentation](https://issues.apache.org/jira/browse/PARQUET-2502) for further details.*

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Piste de recherche

Commencez par ParquetFileReader::getFilteredRowCount() et ColumnIndexFilter, en suivant l’ensemble vide de chemins de colonnes lors de l’évaluation des plages de lignes. Reproduisez le cas Spark de filtre plus comptage dès que la reproduction complète est disponible, puis vérifiez qu’une projection vide avec des index de colonnes et le filter pushdown indique le nombre correct de lignes.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
java
Domaine
data-engineering
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.