2020import java .io .IOException ;
2121
2222import parquet .Log ;
23+ import parquet .bytes .CapacityByteArrayOutputStream ;
2324import parquet .column .ColumnDescriptor ;
2425import parquet .column .ColumnWriter ;
2526import parquet .column .ParquetProperties ;
3132import parquet .io .ParquetEncodingException ;
3233import parquet .io .api .Binary ;
3334
35+ import static java .lang .Math .max ;
36+ import static java .lang .Math .pow ;
37+
3438/**
3539 * Writes (repetition level, definition level, value) triplets and deals with writing pages to the underlying layer.
3640 *
@@ -41,6 +45,7 @@ final class ColumnWriterV1 implements ColumnWriter {
4145 private static final Log LOG = Log .getLog (ColumnWriterV1 .class );
4246 private static final boolean DEBUG = Log .DEBUG ;
4347 private static final int INITIAL_COUNT_FOR_SIZE_CHECK = 100 ;
48+ private static final int MIN_SLAB_SIZE = 64 ;
4449
4550 private final ColumnDescriptor path ;
4651 private final PageWriter pageWriter ;
@@ -57,7 +62,6 @@ public ColumnWriterV1(
5762 ColumnDescriptor path ,
5863 PageWriter pageWriter ,
5964 int pageSizeThreshold ,
60- int initialSizePerCol ,
6165 int dictionaryPageSizeThreshold ,
6266 boolean enableDictionary ,
6367 WriterVersion writerVersion ) {
@@ -69,9 +73,12 @@ public ColumnWriterV1(
6973 resetStatistics ();
7074
7175 ParquetProperties parquetProps = new ParquetProperties (dictionaryPageSizeThreshold , writerVersion , enableDictionary );
72- this .repetitionLevelColumn = ParquetProperties .getColumnDescriptorValuesWriter (path .getMaxRepetitionLevel (), initialSizePerCol , pageSizeThreshold );
73- this .definitionLevelColumn = ParquetProperties .getColumnDescriptorValuesWriter (path .getMaxDefinitionLevel (), initialSizePerCol , pageSizeThreshold );
74- this .dataColumn = parquetProps .getValuesWriter (path , initialSizePerCol , pageSizeThreshold );
76+
77+ this .repetitionLevelColumn = ParquetProperties .getColumnDescriptorValuesWriter (path .getMaxRepetitionLevel (), MIN_SLAB_SIZE , pageSizeThreshold );
78+ this .definitionLevelColumn = ParquetProperties .getColumnDescriptorValuesWriter (path .getMaxDefinitionLevel (), MIN_SLAB_SIZE , pageSizeThreshold );
79+
80+ int initialSlabSize = CapacityByteArrayOutputStream .initialSlabSizeHeuristic (MIN_SLAB_SIZE , pageSizeThreshold , 10 );
81+ this .dataColumn = parquetProps .getValuesWriter (path , initialSlabSize , pageSizeThreshold );
7582 }
7683
7784 private void log (Object value , int r , int d ) {
0 commit comments