spark 2.3.0, parquet 1.8.2 - spark write 生成的文件中不存在二进制字段的统计信息?

rus*_*eel 5 apache-spark parquet

在 spark master 分支上-我尝试将带有“a”、“b”、“c”的单列写入镶木地板文件 f1

scala> List("a", "b", "c").toDF("field1").coalesce(1).write.parquet("f1")
Run Code Online (Sandbox Code Playgroud)

但是保存的文件没有统计信息(最小,最大)

$ ls f1/*.parquet
f1/part-00000-445036f9-7a40-4333-8405-8451faa44319-c000.snappy.parquet
$ parquet-tool meta  f1/*.parquet
file:        file:/Users/stephen/p/spark/f1/part-00000-445036f9-7a40-4333-8405-8451faa44319-c000.snappy.parquet 
creator:     parquet-mr version 1.8.2 (build c6522788629e590a53eb79874b95f6c3ff11f16c) 
extra:       org.apache.spark.sql.parquet.row.metadata = {"type":"struct","fields":[{"name":"field1","type":"string","nullable":true,"metadata":{}}]} 

file schema: spark_schema 
--------------------------------------------------------------------------------
field1:      OPTIONAL BINARY O:UTF8 R:0 D:1

row group 1: RC:3 TS:48 OFFSET:4 
--------------------------------------------------------------------------------
field1:       BINARY SNAPPY DO:0 FPO:4 SZ:50/48/0.96 VC:3 ENC:BIT_PACKED,RLE,PLAIN ST:[no stats for this column]
Run Code Online (Sandbox Code Playgroud)

任何指针将不胜感激。谢谢你。

rus*_*eel 3

设置parquet.strings.signed-min-max.enabledtruein后ShowMetaCommand.java,parquet-tools 元显示最小值、最大值。

@@ -57,8 +57,9 @@ public class ShowMetaCommand extends ArgsOnlyCommand {

     String[] args = options.getArgs();
     String input = args[0];

     Configuration conf = new Configuration();
+    conf.set("parquet.strings.signed-min-max.enabled", "true");
     Path inputPath = new Path(input);
     FileStatus inputFileStatus = inputPath.getFileSystem(conf).getFileStatus(inputPath);
     List<Footer> footers = ParquetFileReader.readFooters(conf, inputFileStatus, false);
Run Code Online (Sandbox Code Playgroud)

结果

row group 1: RC:3 TS:56 OFFSET:4 
--------------------------------------------------------------------------------
field1:       BINARY SNAPPY DO:0 FPO:4 SZ:56/56/1.00 VC:3 ENC:DELTA_BYTE_ARRAY -- ST:[min: a, max: c, num_nulls: 0]
Run Code Online (Sandbox Code Playgroud)