私の他の質問に関連していますが、明確です:
someMap.saveAsTextFile("hdfs://Host:PORT/out")
RDDをHDFSに保存する場合、出力をgzipで圧縮するようにsparkに指示するにはどうすればよいですか?Hadoopでは、次のように設定できます。
mapred.output.compress = true
で圧縮アルゴリズムを選択します
mapred.output.compression.codec = <<classname of compression codec>>
これをSparkでどのように行うのですか?これも機能しますか?
編集:spark-0.7.2を使用
メソッドsaveAsTextFile
は、使用するコーデッククラスの追加のオプションパラメータを取ります。したがって、あなたの例では、gzipを使用すると次のようになります。
someMap.saveAsTextFile("hdfs://Host:PORT/out", classOf[GzipCodec])
[〜#〜] update [〜#〜]
0.7.2を使用しているため、起動時に設定した構成オプションを使用して圧縮コードを移植できる場合があります。これが正確に機能するかどうかはわかりませんが、次のようにする必要があります。
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)
このようなものに:
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")
それが機能するようになれば、設定を投稿することはおそらく他の人にも役立つでしょう。
Gzip圧縮されたファイルをHDFSまたはAmazonS3ディレクトリシステムに保存する別の方法は、saveAsHadoopFileメソッドを使用することです。
someMapはRDD [(K、V)]です。someMapをRDD [V]として使用している場合は、someMap.map(line =>(line、 "")を呼び出してsaveAsHadoopFileメソッドを使用できます。
import org.Apache.hadoop.io.compress.GzipCodec
someMap.saveAsHadoopFile(output_folder_path, classOf[String], classOf[String], classOf[MultipleTextOutputFormat[String, String]], classOf[GzipCodec])
新しいSparkリリースの場合は、spark-defaults.xmlファイルで次の手順を実行してください(mapred
は削除されます)。
<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>