Relatif à mon autre question, mais distincte:
someMap.saveAsTextFile("hdfs://Host:PORT/out")
Si je sauvegarde un RDD sur HDFS, comment puis-je demander à spark de compresser la sortie avec gzip? Dans Hadoop, il est possible de définir
mapred.output.compress = true
et choisissez l'algorithme de compression avec
mapred.output.compression.codec = <<classname of compression codec>>
Comment pourrais-je faire cela en étincelle? Cela fonctionnera-t-il aussi?
edit : using spark-0.7.2
La méthode saveAsTextFile
prend un paramètre facultatif supplémentaire de la classe de codec à utiliser. Donc, pour votre exemple, utiliser gzip devrait ressembler à ceci:
someMap.saveAsTextFile("hdfs://Host:PORT/out", classOf[GzipCodec])
METTRE &AGRAVE; JOUR
Puisque vous utilisez 0.7.2, vous pourrez peut-être porter le code de compression via les options de configuration que vous avez définies au démarrage. Je ne sais pas si cela fonctionnera exactement, mais vous devez partir de cela:
conf.setCompressMapOutput(true)
conf.set("mapred.output.compress", "true")
conf.setMapOutputCompressorClass(c)
conf.set("mapred.output.compression.codec", c.getCanonicalName)
conf.set("mapred.output.compression.type", CompressionType.BLOCK.toString)
à quelque chose comme ça:
System.setProperty("spark.hadoop.mapred.output.compress", "true")
System.setProperty("spark.hadoop.mapred.output.compression.codec", "true")
System.setProperty("spark.hadoop.mapred.output.compression.codec", "org.Apache.hadoop.io.compress.GzipCodec")
System.setProperty("spark.hadoop.mapred.output.compression.type", "BLOCK")
Si vous le faites fonctionner, publier votre configuration serait probablement utile pour les autres aussi.
Un autre moyen de sauvegarder les fichiers gzippés sur le système de répertoires HDFS ou Amazon S3 consiste à utiliser la méthode saveAsHadoopFile .
someMap est RDD [(K, V)]. Si vous avez someMap comme RDD [V], vous pouvez appeler someMap.map (line => (line, "")) pour utiliser la méthode saveAsHadoopFile.
import org.Apache.hadoop.io.compress.GzipCodec
someMap.saveAsHadoopFile(output_folder_path, classOf[String], classOf[String], classOf[MultipleTextOutputFormat[String, String]], classOf[GzipCodec])
Pour les nouvelles versions de Spark, procédez comme suit dans votre fichier spark-defaults.xml. (mapred
est dérivé).
<property>
<name>mapreduce.output.fileoutputformat.compress</name>
<value>true</value>
</property>
<property>
<name>mapreduce.output.fileoutputformat.compress.codec</name>
<value>GzipCodec</value>
</property>
<property>
<name>mapreduce.output.fileoutputformat.compress.type</name>
<value>BLOCK</value>
</property>