使用Snappy压缩将Spark DataFrame写入ORC格式

4

我已经成功地在使用Spark数据框架读取存储在S3中的文本文件,并将其以ORC格式写回S3。代码如下:inputDf.write().orc(outputPath);
但是,我无法使用Snappy压缩转换为ORC格式。我已经尝试在写入时设置编解码器选项为Snappy,但Spark仍然按照普通的ORC格式写入。那么,如何使用Spark数据框架实现将数据以ORC格式和Snappy压缩方式写入到S3呢?


请参阅https://issues.apache.org/jira/browse/SPARK-13543。 - Mark Rajcok
默认的(zlib)可能比Snappy更好: https://community.hortonworks.com/questions/4067/snappy-vs-zlib-pros-and-cons-for-each-compression.html - Mark Rajcok
@MarkRajcok 谢谢,这意味着只有在使用Spark 2.0时,我才能使用.option压缩ORC格式。 您能否建议其他方法来压缩输出。我正在使用带有Spark 1.6的Amazon EMR。 - abstractKarshit
我还没有找到在Spark 1.x上以ORC-snappy格式写出数据框的方法。 - Mark Rajcok
1个回答

3

如果有人遇到同样的问题,在Spark 2.0中这是默认支持的。 ORC的默认压缩格式被设置为snappy。

public class ConvertToOrc {
    public static void main(String[] args) {
        SparkSession spark = SparkSession
                .builder()
                .appName("OrcConvert")
                .getOrCreate();
        String inputPath = args[0];
        String outputPath = args[1];

        Dataset<Row> inputDf = spark.read().option("sep", "\001").option("quote", "'").csv(inputPath);
        inputDf.write().format("orc").save(outputPath);

   }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接