欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Apache parquet格式解析

程序员文章站 2022-07-14 12:22:31
...

最近在研究列式存储文件格式,所以就研究了下apache parquet格式.下面将讲下该格式相关东西,慢慢更新.

因为我是用spark去读写parquet的,所以下面的分析会涉及部分spark源码.

Parquet版本区别

在spark输出parquet有两个版本,v1和v2. 这两个版本主要是在数据编码上有区别,其中v1没有用最新的rlebit算法,压缩上表现可能会差点.注意:默认的是v1版本.

Parquet写版本设置

spark写parquet有两个版本,默认是v1.

org.apache.parquet.column.impl.ColumnWriteStoreV1
org.apache.parquet.column.impl.ColumnWriteStoreV2
package org.apache.parquet.hadoop;
public class ParquetOutputFormat<T> extends FileOutputFormat<Void, T> { 
    public static WriterVersion getWriterVersion(Configuration configuration) {
        String writerVersion = configuration.get(
        WRITER_VERSION, ParquetProperties.DEFAULT_WRITER_VERSION.toString());
        return WriterVersion.fromString(writerVersion);
  }
}

上面这个代码在写parquet的时候会获取写的版本,但是由于没设置,所以得的结果就是默认的v1. 我找了一圈,发现了如何设置写v2版本.下面是设置代码.注意一定是要在最开始创建spark的就配置,中途在conf设置是不生效的.

val spark = SparkSession.builder().appName("test").config( "spark.hadoop.parquet.writer.version", "v2").getOrCreate