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