32 votes

Est-il préférable d'avoir un seul grand fichier de parquet ou plusieurs petits fichiers de parquet ?

Je crois savoir que HDF divise les fichiers en quelque chose comme des morceaux de 64 Mo. Nous recevons des données en continu et nous pouvons les stocker dans des fichiers volumineux ou de taille moyenne. Quelle est la taille optimale pour le stockage de fichiers en colonnes ? Si je peux stocker des fichiers dont la plus petite colonne est de 64 Mo, est-ce que cela permettrait de gagner du temps de calcul par rapport à des fichiers de 1 Go, par exemple ?

34voto

Garren S Points 2553

Visez environ 1 Go par fichier (partition étincelle) (1).

Idéalement, vous devriez utiliser la compression snappy (par défaut) car les fichiers parquet compressés snappy peuvent être divisés (2).

L'utilisation de snappy au lieu de gzip augmentera considérablement la taille du fichier, donc si l'espace de stockage est un problème, il faut en tenir compte.

.option("compression", "gzip") est l'option permettant de remplacer la compression par défaut.

Si vous devez redimensionner/repartitionner votre Dataset/DataFrame/RDD, appelez la fonction .coalesce(<num_partitions> ou dans le pire des cas .repartition(<num_partitions>) fonction. Attention : repartitionner surtout mais aussi coalescer peut provoquer un remaniement des données, donc à utiliser avec une certaine prudence.

De même, la taille des fichiers de parquet, et d'ailleurs de tous les fichiers, doit être supérieure à la taille des blocs HDFS (128 Mo par défaut).

1) https://forums.databricks.com/questions/101/what-is-an-optimal-size-for-file-partitions-using.html 2) http://boristyukin.com/is-snappy-compressed-parquet-file-splittable/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X