Le choix du bon format de fichier est important pour créer des applications de données performantes. Les concepts décrits dans cet article s'appliquent à Pandas, Dask, Spark et Presto / AWS Athena.
Élagage des colonnes
L'élagage des colonnes est une amélioration importante des performances qui est possible pour les formats de fichiers basés sur des colonnes (Parquet, ORC) et impossible pour les formats de fichiers basés sur des lignes (CSV, Avro).
Supposons que vous disposiez d'un ensemble de données comportant 100 colonnes et que vous souhaitiez lire deux d'entre elles dans un DataFrame. Voici comment vous pouvez effectuer cette opération avec Pandas si les données sont stockées dans un fichier Parquet.
import pandas as pd
pd.read_parquet('some_file.parquet', columns = ['id', 'firstname'])
Parquet étant un format de fichier en colonnes, Pandas peut saisir les colonnes pertinentes pour la requête et ignorer les autres colonnes. Il s'agit d'une amélioration considérable des performances.
Si les données sont stockées dans un fichier CSV, vous pouvez le lire comme suit :
import pandas as pd
pd.read_csv('some_file.csv', usecols = ['id', 'firstname'])
usecols
ne peut pas sauter des colonnes entières en raison de la nature des lignes du format de fichier CSV.
Spark ne demande pas aux utilisateurs de lister explicitement les colonnes qui seront utilisées dans une requête. Spark construit un plan d'exécution et exploitera automatiquement l'élagage des colonnes chaque fois que possible. Bien sûr, l'élagage des colonnes n'est possible que lorsque le format de fichier sous-jacent est orienté colonnes.
Popularité
Spark et Pandas ont des lecteurs-graveurs intégrés pour les fichiers CSV, JSON, ORC, Parquet et texte. Ils n'ont pas de lecteurs intégrés pour Avro.
Avro est populaire dans l'écosystème Hadoop. Parquet a gagné en popularité en dehors de l'écosystème Hadoop. Par exemple, le Lac Delta Le projet est construit sur des fichiers Parquet.
Flèche est un projet important qui permet de travailler facilement avec des fichiers Parquet avec une variété de langages différents (C, C++, Go, Java, JavaScript, MATLAB, Python, R, Ruby, Rust), mais ne supporte pas Avro. Il est plus facile de travailler avec les fichiers Parquet parce qu'ils sont supportés par un grand nombre de projets différents.
Schéma
Parquet stocke le schéma du fichier dans les métadonnées du fichier. Les fichiers CSV ne stockent pas de métadonnées de fichier, donc les lecteurs doivent soit recevoir le schéma, soit le déduire. Fournir un schéma est fastidieux et déduire un schéma est source d'erreurs et coûteux.
Avro stocke également le schéma de données dans le fichier lui-même. Le fait d'avoir le schéma dans les fichiers est un avantage énorme et c'est l'une des raisons pour lesquelles un projet de données moderne ne devrait pas s'appuyer sur JSON ou CSV.
Métadonnées des colonnes
Magasins de parquet statistiques des métadonnées pour chaque colonne y permet aux utilisateurs d'ajouter leurs propres métadonnées de colonne également.
Les métadonnées des valeurs min. et max. des colonnes permettent le filtrage par prédicat Parquet pushdown, qui est pris en charge par les cadres de calcul en cluster Dask et Spark.
Voici comment récupérer les statistiques des colonnes avec PyArrow.
import pyarrow.parquet as pq
parquet_file = pq.ParquetFile('some_file.parquet')
print(parquet_file.metadata.row_group(0).column(1).statistics)
<pyarrow._parquet.Statistics object at 0x11ac17eb0>
has_min_max: True
min: 1
max: 9
null_count: 0
distinct_count: 0
num_values: 3
physical_type: INT64
logical_type: None
converted_type (legacy): NONE
Types de colonnes complexes
Parquet permet des types de colonnes complexes comme les tableaux, les dictionnaires et les schémas imbriqués. Il n'existe pas de méthode fiable pour stocker des types complexes dans des formats de fichiers simples comme les CSV.
Compression
Les formats de fichiers en colonnes stockent les types apparentés en rangées, ce qui les rend plus faciles à compresser. Ce fichier CSV est relativement difficile à compresser.
first_name,age
ken,30
felicia,36
mia,2
Ces données sont plus faciles à compresser lorsque les types apparentés sont stockés dans la même ligne :
ken,felicia,mia
30,36,2
Les fichiers Parquet sont le plus souvent compressés avec l'algorithme de compression Snappy. Les fichiers compressés par Snappy sont fractionnables et rapides à gonfler. Les systèmes de big data veulent réduire la taille des fichiers sur le disque, mais veulent aussi qu'il soit rapide de gonfler les mouches et d'exécuter des requêtes analytiques.
Caractère mutable du dossier
Les fichiers Parquet sont immuables, comme décrit ici . CSV sont mutables.
Ajouter une ligne à un fichier CSV est facile. Vous ne pouvez pas facilement ajouter une ligne à un fichier Parquet.
Lacs de données
Dans un environnement de big data, vous travaillerez avec des centaines ou des milliers de fichiers Parquet. Il est important de partitionner les fichiers sur le disque, d'éviter les gros fichiers et de compacter les petits fichiers. La disposition optimale des données sur le disque dépend de vos modèles de requête.
4 votes
Un bon résumé peut être trouvé dans cette présentation : lien
0 votes
@ani-menon Le lien est mort.
0 votes
@SajjadHossain mis à jour.