Parquet, CSV
https://www.icem7.fr/outils/parquet-devrait-remplacer-le-format-csv/ https://www.datacamp.com/fr/tutorial/apache-parquet https://www.snowflake.com/fr/fundamentals/parquet/
Lecture/Ecriture Compression Chargement en mémoire Métadonnées Usages à l’INSEE, Big Data…
Logiciel Tad pour lire fichier
Introduction
Il existe de multiples façon de stocker de la données. Nous verrons ici :
- CSV : format texte simple, universel et lisible par l’humain
- Parquet : optimisé et efficace pour les opérations sur les colonnes
1 CSV
CSV signifie Comma-Separated Values ➡️ Valeurs séparées par des virgules.
C’est un format de fichier texte très simple utilisé pour stocker des données tabulaires
- Chaque ligne du fichier correspond à une ligne du tableau.
- Chaque colonne est séparée par un caractère spécial (le délimiteur).
Avantages : Léger, universel, lisible par n’importe quel éditeur de texte.
En France, le délimiteur de colonnes par défaut n’est pas la virgule mais le point-virgule ;.
Mais il arrive de trouver des fichiers csv dont le délimiteur est une virgule , une tabulation \t, un pipe | ou autres.
1.1 Exemples
- Délimiteur :
; - Séprateur de décimale :
,
departements.csv
DEP;CHEFLIEU;LIBELLE;POP_KM2
01;Bourg-en-Bresse;Ain;85,4
02;Laon;Aisne;45,2
03;Moulins;Allier;51,7
04;Digne-les-Bains;Alpes-de-Haute-Provence;18,9
05;Gap;Hautes-Alpes;17,5- Délimiteur :
, - Quotes
"pour gérer les cas où une valeur textuelle contenait elle-même un séparateur - Séparateur de décimales :
.
meteo.csv
STATION_ID,TEMP_C,OBSERVATION
1,12.5,"Ciel dégagé"
2,18.3,"Nuageux, vent faible"
3,-4.2,"Gelée, température sous 0"
4,25.0,"Chaleur intense"- Délimiteur :
|
departements.csv
DEP|CHEFLIEU|LIBELLE
01|Bourg-en-Bresse|Ain
02|Laon|Aisne
03|Moulins|Allier
04|Digne-les-Bains|Alpes-de-Haute-Provence
05|Gap|Hautes-Alpes1.2 Charger un CSV en R
En R, nous utilisons soit la fonction de base (read.csv2), soit le package readr (plus moderne et rapide), soit data.table (pour les très gros fichiers).
- Avant de charger un fichier : ouvrez-le avec un éditeur de texte pour vérifier le délimiteur !!!
- Après chargement : vérifiez que les colonnes (et leurs types) de votre dataframe sont cohérentes
1.2.1 R base
df <- read.csv("data.csv") # Lecture standard (délimiteur virgule)
df <- read.csv2("data.csv") # Lecture avec point-virgule (format européen courant)
# Options manuelles
df <- read.csv2("data.csv",
sep = ";", # Délimiteur
dec = ",", # Séparateur de décimales
header = TRUE, # La première ligne contient les noms de colonnes
stringsAsFactors = FALSE, # Empêcher la conversion auto en factors
encoding = "UTF8") # Encodage du fichier1.2.2 Avec readr
library(readr)
df <- read_csv("data.csv")
df2 <- read_delim("data.csv", delim = ";")1.3 Charger un CSV en Python
1.3.1 Avec le module natif csv
Utile pour des scripts très légers où l’on ne veut pas installer Pandas.
import csv
with open('data.csv', mode='r', encoding='utf-8') as f:
reader = csv.reader(f, delimiter=';')
for row in reader:
print(row)1.3.2 Avec Pandas
import pandas as pd
# Lecture standard (virgule)
df = pd.read_csv('data.csv')
# Options courantes
df = pd.read_csv('data.csv',
sep=';', # Délimiteur
header=0, # Utiliser la ligne 0 comme en-tête
index_col='id', # Définir une colonne comme index
usecols=['A', 'B'], # Ne charger que certaines colonnes
encoding='utf-8', # Gérer l'encodage
nrows=100) # Lire seulement les 100 premières lignes2 Parquet
Parquet est un format de stockage de données orienté colonne : les valeurs sont stockées colonne par colonne.
Ce n’est pas un format que l’on “écrit” à la main, mais un format que l’on génère via des outils de programmation (Python/Pandas, R, Spark, SQL).
L’avantage majeur : Si vous avez un dataset de 100 colonnes mais que votre analyse ne porte que sur la colonne Age, un moteur de lecture (comme Pandas ou Spark) ne lira que les octets correspondant à la colonne Age. En CSV, vous seriez obligé de lire tout le fichier.
2.1 Pourquoi utiliser Parquet ?
Contrairement aux formats orientés lignes (CSV, JSON), Parquet est conçu pour les charges de travail analytiques (OLAP) où l’on lit rarement toute la table, mais seulement quelques colonnes.
Stocker les données par colonne permet :
- de ne lire que les colonnes utiles lors d’une requête (
column pruning), - d’appliquer des algorithmes de compression adaptés aux valeurs similaires,
- d’activer l’exécution vectorisée (
SIMD) dans les moteurs modernes.
2.3 Utilisation typique
- Data Lakes : format natif de référence pour S3, ADLS, GCS
- Moteurs de calcul : Apache Spark, DuckDB, Pandas (
pyarrow), Dask, Polars - Couches de table moderne : Apache Iceberg, Delta Lake, Hudi (utilisent Parquet comme format physique)
- BI & Analytics : connexion native dans Tableau, Power BI, Metabase, Superset
2.4 Avantages & Inconvénients
| ✅ Avantages | ❌ Inconvénients |
|---|---|
| 📉 Compression 5 à 10x supérieure au CSV | 🔒 Écrase difficilement une ligne (design append-only) |
| ⚡ Lectures analytiques accélérées (vectorisées) | 🐢 Pas adapté à la lecture/écriture en mode transactionnel |
| 📐 Schéma strict & auto-descriptif | 🧩 Requiert des bibliothèques compatibles (PyArrow, Parquet-cpp, etc.) |
| 🌐 Interopérable (Python, R, Java, Scala, SQL…) | 📦 Fichier monolithique : difficile à modifier partiellement |
2.2 Comment est-il construit ?
Parquet est un format binaire structuré hiérarchiquement :
Row GroupChaque colonne utilise des encodages spécialisés (Dictionary, RLE, Delta, ByteStreamSplit) puis une compression par page (Snappy, GZIP, ZSTD). Les métadonnées incluent automatiquement les statistiques par
Row Group(min, max, null count), permettant des optimisations comme lepredicate pushdown.