read footer using 1 call readFully(byte[8]) instead of 5 calls ( 4 x read() for footer length + 1 x read(byte[4]) for magic marker )
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 55/100
- Type d'issue
- Fonctionnalité
- Clarté
- Clairement spécifiée
- Activité
- À l'abandon
- Stack technique
- java
- Domaine
- data-engineering
Piste de recherche
Dans parquet-hadoop/src/main/java/org/apache/parquet/hadoop/ParquetFileReader.java, examinez d’abord readFooter() ainsi que les lectures actuelles de la longueur du footer et des valeurs magic. Vérifiez qu’un seul readFully(byte[8]) conserve la gestion du magic du footer standard et du footer chiffré, puis exécutez les tests pertinents du projet ; le travail est terminé lorsque l’analyse du footer reste correcte avec moins d’appels de lecture.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Describe the enhancement requested
This is a minor performance improvement, but worth when reading many files.
read footer using 1 call readFully(byte[8]) instead of 5 calls ( 4 x read() for footer length + 1 x read(byte[4]) for magic marker )
in summary the patch is for file ParquetFileReader.java, method "readFooter()" :
--- a/parquet-hadoop/src/main/java/org/apache/parquet/hadoop/ParquetFileReader.java
+++ b/parquet-hadoop/src/main/java/org/apache/parquet/hadoop/ParquetFileReader.java
@@ -585,14 +585,18 @@ public class ParquetFileReader implements Closeable {
}
// Read footer length and magic string - with a single seek
- byte[] magic = new byte[MAGIC.length];
- long fileMetadataLengthIndex = fileLen - magic.length - FOOTER_LENGTH_SIZE;
+ long fileMetadataLengthIndex = fileLen - MAGIC.length - FOOTER_LENGTH_SIZE;
LOG.debug("reading footer index at {}", fileMetadataLengthIndex);
f.seek(fileMetadataLengthIndex);
- int fileMetadataLength = readIntLittleEndian(f);
- f.readFully(magic);
+ byte[] magicAndLengthBytes = new byte[FOOTER_LENGTH_SIZE + MAGIC.length];
+ f.readFully(magicAndLengthBytes);
+ int fileMetadataLength = readIntLittleEndian(magicAndLengthBytes, 0);
boolean encryptedFooterMode;
+ // using JDK >= 9: if (Arrays.equals(MAGIC, 0, MAGIC.length, magicAndLengthBytes, FOOTER_LENGTH_SIZE, FOOTER_LENGTH_SIZE + MAGIC.length)) {
+ // using JDK <= 8: need extract sub array then compare
+ byte[] magic = new byte[MAGIC.length];
+ System.arraycopy(magicAndLengthBytes, FOOTER_LENGTH_SIZE, magic, 0, MAGIC.length);
if (Arrays.equals(MAGIC, magic)) {
encryptedFooterMode = false;
} else if (Arrays.equals(EFMAGIC, magic)) {
Component(s)
Core
- Langage dominant
- Java
- Étoiles
- 3.1k
- Forks
- 1.6k
- Merge moyen
- 6 j 16 h
- PR mergées (30 j)
- 36
Guide de contribution
Aucun guide de contribution indexé pour ce dépôt
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de apache/parquet-java
-
Type: bug
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
apache/parquet-java#3792 ·
-
Make PageReader AutoCloseable Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
apache/parquet-java#3767 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
apache/parquet-java#3695 · 1 commentaire ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
apache/parquet-java#3667 ·
-
Type: bug
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
apache/parquet-java#3574 · 1 commentaire ·
Toutes les issues de apache/parquet-java
Issues similaires
-
documentation
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
inu-appcenter/memorIN-backend#288 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
-
frontend maui-pilot pilot-ask question
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
-
executions.Query — startDate and timeRange filters are sent with inverted comparison operators Ouvertearea/plugin
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
kestra-io/plugin-kestra#190 ·