Pour un projet Big Data, je prévois d'utiliser spark , qui a quelques fonctionnalités intéressantes comme les calculs en mémoire pour les charges de travail répétées. Il peut s'exécuter sur des fichiers locaux ou sur HDFS.
Cependant, dans la documentation officielle, je ne trouve aucune indication sur la façon de traiter les fichiers compressés. En pratique, il peut être assez efficace de traiter des fichiers .gz au lieu de fichiers décompressés.
Existe-t-il un moyen d'implémenter manuellement la lecture des fichiers compressés ou la décompression est-elle déjà effectuée automatiquement lors de la lecture d'un fichier .gz?
À partir du Spark Scala Guide de programmation section sur "Hadoop Datasets" :
Spark peut créer des jeux de données distribués à partir de n'importe quel fichier stocké dans le système de fichiers distribués Hadoop (HDFS) ou d'autres systèmes de stockage pris en charge par Hadoop (y compris votre système de fichiers local, Amazon S3, Hypertable, HBase, etc.). Spark prend en charge les fichiers texte, SequenceFiles et tout autre Hadoop InputFormat.
La prise en charge des fichiers d'entrée gzip devrait fonctionner de la même manière que dans Hadoop. Par exemple, sc.textFile("myFile.gz")
devrait automatiquement décompresser et lire les fichiers compressés avec gzip (textFile()
est en fait implémenté en utilisant TextInputFormat
de Hadoop, qui prend en charge gzip- fichiers compressés).
Comme mentionné par @ nick-chammas dans les commentaires:
notez que si vous appelez
sc.textFile()
sur un fichier compressé, Spark vous donnera un RDD avec seulement 1 partition (à partir de 0.9.0). En effet, les fichiers compressés sont non divisible . Si vous ne repartitionnez pas le RDD d'une manière ou d'une autre, toutes les opérations sur ce RDD seront limitées à un seul cœur