saveAsTextFile
方法还有一个可选参数,可以用来指定编解码器的类。因此,在你的示例中,如果要使用 gzip,应该像这样:
saveAsTextFile(outputPath, classOf[gzip.GzipCodec])
someMap.saveAsTextFile("hdfs://HOST:PORT/out", classOf[GzipCodec])
更新
因为你正在使用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")
如果您成功了,将您的配置发布出来可能对其他人也有所帮助。
System.setProperty(...) [...]
),并且它在0.7.2上立即生效。谢谢 :) - ptikobjspark.hadoop.mapred.output.compression.codec
两次,除非我漏掉了什么,否则这是多余的。 - sw1nnspark-defaults.xml
中以类似的方式设置这些参数,以便每个作业都可以使用它?我尝试将设置复制到spark-defaults.xml
中,但好像没有被采用。 - nikk