CommencerCommencer gratuitement

Travailler avec des fichiers Parquet

Les fichiers CSV sont très pratiques pour sauvegarder sur disque le contenu d’objets de données rectangulaires (comme les data.frame de R et les DataFrames de Spark). Le problème, c’est qu’ils sont très lents à lire et à écrire, ce qui les rend peu adaptés aux jeux de données volumineux. Les fichiers Parquet offrent une alternative plus performante. En plus d’être utilisés pour les données Spark, les fichiers Parquet peuvent aussi être exploités avec d’autres outils de l’écosystème Hadoop, comme Shark, Impala, Hive et Pig.

D’un point de vue technique, parler de « fichier Parquet » est impropre. Lorsque vous stockez des données au format Parquet, vous obtenez en réalité tout un répertoire de fichiers. Les données sont réparties entre plusieurs fichiers .parquet, ce qui facilite leur stockage sur plusieurs machines, et des fichiers de métadonnées décrivent aussi le contenu de chaque colonne.

sparklyr peut importer des fichiers Parquet via spark_read_parquet(). Cette fonction prend une connexion Spark, une chaîne indiquant le nom du Spark DataFrame à créer, ainsi qu’un chemin vers le répertoire Parquet. Notez qu’elle importe les données directement dans Spark, ce qui est généralement plus rapide que d’importer d’abord les données dans R, puis d’utiliser copy_to() pour copier les données de R vers Spark.

spark_read_parquet(sc, "a_dataset", "path/to/parquet/dir")

Cet exercice fait partie du cours

Introduction à Spark avec sparklyr en R

Afficher le cours

Instructions

Une connexion Spark a été créée pour vous sous le nom spark_conn. Une chaîne pointant vers le répertoire Parquet (sur le système de fichiers où R s’exécute) a été créée sous le nom parquet_dir.

  • Utilisez dir() pour lister les chemins de fichiers absolus des fichiers du répertoire Parquet et affectez le résultat à filenames.
    • Le premier argument doit être le répertoire dont vous listez les fichiers, parquet_dir.
    • Pour récupérer les chemins absolus (plutôt que relatifs), passez également full.names = TRUE.
  • Créez un data_frame avec deux colonnes.
    • filename doit contenir les noms de fichiers que vous venez de récupérer, sans la partie répertoire. Créez cela en passant les noms de fichiers à basename().
    • size_bytes doit contenir la taille de ces fichiers. Créez cela en passant les noms de fichiers à file.size().
  • Utilisez spark_read_parquet() pour importer les données de timbre dans Spark et affectez le résultat à timbre_tbl.
    • Le premier argument doit être la connexion Spark.
    • Le deuxième argument doit être "timbre".
    • Le troisième argument doit être parquet_dir.

Exercice interactif pratique

Essayez cet exercice en complétant cet exemple de code.

# parquet_dir has been pre-defined
parquet_dir

# List the files in the parquet dir
filenames <- ___

# Show the filenames and their sizes
data_frame(
  filename = ___,
  size_bytes = ___
)

# Import the data into Spark
timbre_tbl <- ___
Modifier et exécuter le code