Apache Parquet

Apache Parquet
Description de l'image Apache Parquet logo.svg.
Informations
Développé par Apache Software FoundationVoir et modifier les données sur Wikidata
Première version Voir et modifier les données sur Wikidata
Dernière version 1.18.1 ()Voir et modifier les données sur Wikidata
Dépôt github.com/apache/parquet-javaVoir et modifier les données sur Wikidata
Écrit en JavaVoir et modifier les données sur Wikidata
Type Projet de la fondation Apache (d)
Format de fichier (en)Voir et modifier les données sur Wikidata
Licence Licence Apache 2.0Voir et modifier les données sur Wikidata
Documentation parquet.apache.org/docsVoir et modifier les données sur Wikidata
Site web parquet.apache.orgVoir et modifier les données sur Wikidata
Apache Parquet
Caractéristiques
Extension
.parquetVoir et modifier les données sur Wikidata
Type MIME
application/vnd.apache.parquetVoir et modifier les données sur Wikidata
PUID
Signature
50 41 52 31 (hexa)Voir et modifier les données sur Wikidata
Développé par
Version initiale
Site web

Apache Parquet est un format de fichiers orienté colonne, initialement développé pour l'écosystème de calcul distribué Apache Hadoop. Il est similaire aux autres formats de fichiers de stockage colonnaires disponibles dans Hadoop, à savoir RCFile et Optimized RCFile. Il est compatible avec la plupart des frameworks de traitement de données de l'environnement Hadoop. Il fournit des schémas efficaces de compression et de codage de données avec des performances améliorées pour gérer des données complexes en masse.

Historique

Le projet open source qui a abouti à Apache Parquet vient des efforts conjoints entre Twitter et Cloudera. La première version de Apache Parquet 1.0 sort en . Depuis le Apache Parquet devient un projet top-level de la Apache Software Foundation,

Fonctionnalités

Apache Parquet utilise l’algorithme de fragmentation et d’assemblage des enregistrements (« record-shredding and assembly »), qui permet de gérer les structures de données complexes utilisées pour le stockage des données. Les valeurs de chaque colonne sont stockées dans des emplacements mémoire contigus, offrant les avantages suivants :

Apache Parquet est implémenté à l’aide du framework Apache Thrift, ce qui accroît sa flexibilité : il est compatible avec plusieurs langages de programmation comme C++, Java, Python, PHP, etc. En , Parquet supportait les frameworks de traitement de données massives suivants : Apache Hive, Apache Drill, Apache Impala, Apache Crunch, Apache Pig, Cascading, Presto et Apache Spark. Il s’agit également de l’un des formats de données externes utilisés par les bibliothèques pandas et polars de Python, dédiées à la manipulation et à l’analyse de données.

Compression et encodage

Avec Parquet, la compression s'effectue colonne par colonne, ce qui permet d'utiliser différents schémas d'encodage pour les données textuelles et les données entières. Cette stratégie permet également d'ouvrir la voie à la mise en œuvre de nouveaux schémas d'encodage plus performants à mesure qu'ils sont inventés.

Parquet prend en charge divers formats de compression : snappy, gzip, LZO, brotli, zstd et LZ4.

Encodage par dictionnaire

Parquet dispose d'un encodage par dictionnaire automatique activé dynamiquement pour les données comportant un petit nombre de valeurs uniques (c'est-à-dire inférieur à 105), ce qui permet une compression importante et augmente la vitesse de traitement.

Compression par bits

Le stockage des entiers s'effectue généralement avec 32 ou 64 bits dédiés par entier. Pour les petits entiers, le regroupement de plusieurs entiers dans le même espace rend le stockage plus efficace.

Codage par plages (RLE)

Afin d'optimiser le stockage de plusieurs occurrences d'une même valeur, on utilise un encodage par plages, qui consiste à stocker une seule fois une valeur unique avec le nombre d'occurrences.

Parquet met en œuvre un hybride de bit packing et de RLE, dans lequel le codage bascule en fonction de celui qui produit les meilleurs résultats de compression. Cette stratégie fonctionne bien pour certains types de données entières et se combine bien avec le codage par dictionnaire.

Data Lakes et autres stockages Cloud

Le format Apache Parquet est largement utilisé comme format de fichier sous-jacent dans les architectures modernes de lacs de données. Des systèmes de stockage dans le cloud tels qu'Amazon S3, Azure Data Lake Storage et Google Cloud Storage stockent généralement les données au format Parquet en raison de ses capacités efficaces de représentation et de récupération en colonnes. Les environnements de data lakehouse, notamment Apache Iceberg, Delta Lake et Apache Hudi , ajoutent une couche de métadonnées supplémentaire aux fichiers Parquet afin de prendre en charge des fonctionnalités telles que l'évolution des schémas, les requêtes temporelles et les transactions conformes à l'ACID. Dans ces architectures, les fichiers Parquet servent de couche de stockage immuable, tandis que les formats de table gèrent le versionnage des données et l'intégrité transactionnelle.

Comparaison

Apache Parquet est comparable aux formats de fichiers RCFile et Optimized Row Columnar (ORC) : tous trois appartiennent à la catégorie des formats de stockage de données en colonnes dans l'écosystème Hadoop. Par rapport à des fichiers plats (csv, tsv) ou semi-structurés (json, xml), ils offrent une meilleure compression et un meilleur encodage, ainsi que des performances de lecture améliorées, au détriment d'une vitesse d'écriture plus lente.

Comparaison des formats CSV et Apache Parquet
Critère CSV Apache Parquet
Type de format Texte brut, orienté lignes Binaire, orienté colonnes
Lisibilité humaine  Oui — lisible dans un éditeur de texte  Non — nécessite un outil dédié
Schéma et typage  Non — pas de schéma ; types déduits à la lecture  Oui — schéma typé stocké dans les métadonnées du fichier
Compression Aucune native (compression externe possible, ex. gzip) Intégrée, par colonne (Snappy, Gzip, Zstandard…)
Lecture sélective  Non — lecture complète de chaque ligne  Oui — lecture des seules colonnes utiles ; groupes de lignes ignorés grâce aux statistiques min/max
Écriture et ajout Simple, en flux ; ajout de lignes en fin de fichier Par lots ; fichiers immuables une fois écrits
Évolution du schéma  Non Partielle au niveau des fichiers (réconciliation par le moteur de lecture) ; complète via un format de table comme Apache Iceberg ou Delta Lake
Robustesse du parsing Sensible aux délimiteurs, guillemets, encodages et sauts de ligne Auto-descriptif, sans ambiguïté de lecture
Usages typiques Échanges de petits volumes, inspection manuelle Analytique, lacs de données, grands volumes

Evolution de schéma

Un fichier Parquet est immuable et porte son propre schéma figé dans son footer. On ne peut pas changer le schéma d'un fichier existant.

Mais grâce aux outils de lectures des données, il est possible d'unifier plusieurs fichiers parquet (généralement écrit dans un dossier ou une arborescence). C'est le lecteur (Spark avec mergeSchema, DuckDB avec union_by_name, etc.) qui réconcilie ces schémas au moment de la lecture, en associant les colonnes par leur nom. Une colonne absente des anciens fichiers ressort alors à null.

Les changements de datatypes ne viennent pas de parquet mais sont possibles via les implémentations des outils clients

Apache Arrow est conçu comme un complément en mémoire aux formats en colonnes sur disque tels que Parquet et ORC. Les projets Arrow et Parquet comprennent des bibliothèques qui permettent la lecture et l'écriture entre les deux formats.

Articles connexes

Notes et références

  1. ↑ « https://projects.apache.org/json/projects/parquet.json » (consulté le )
  2. ↑ « Release 1.18.1 », (consulté le )
  3. ↑ « Announcing Parquet 1.0 : Columnar Storage for Hadoop », sur twitter.com (consulté le ).
  4. ↑ (en) « Cloudera Blog - », sur Cloudera Blog (consulté le ).
  5. ↑ (en) « Apache Parquet paves the way for better Hadoop data storage », sur infoworld.com via Internet Archive (consulté le ).
  6. ↑ (en) « The Apache Software Foundation Announces Apache™ Parquet™ as a Top-Level Project », sur The Apache Software Foundation Blog, (consulté le ).
  7. ↑ « The striping and assembly algorithms from the Dremel paper », sur GitHub.
  8. ↑ (en) « Compression », sur Parquet.
  9. 1 2 3 4 https://blog.twitter.com/2013/announcing-parquet-10-columnar-storage-for-hadoop
  10. ↑ « CSV vs Parquet : quel format choisir ? », sur Architecture & Performance, (consulté le )
  11. ↑ (en) « Reading and Writing the Apache Parquet Format », sur apache.org.