You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@spark.apache.org by "Ivan Gozali (JIRA)" <ji...@apache.org> on 2017/11/16 01:19:00 UTC
[jira] [Created] (SPARK-22536) VectorizedParquetRecordReader
doesn't use Parquet's dictionary filtering feature
Ivan Gozali created SPARK-22536:
-----------------------------------
Summary: VectorizedParquetRecordReader doesn't use Parquet's dictionary filtering feature
Key: SPARK-22536
URL: https://issues.apache.org/jira/browse/SPARK-22536
Project: Spark
Issue Type: Improvement
Components: SQL
Affects Versions: 2.2.0
Environment: Spark 2.2.0
Reporter: Ivan Gozali
The VectorizedParquetRecordReader currently only uses statistics filtering, and does not make use of dictionary filtering in Parquet. Having dictionary filtering would be very useful for string/binary columns that have low cardinality
Some relevant code paths:
* https://github.com/apache/spark/blob/master/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/ParquetFileFormat.scala#L367-L387 When vectorizedReader is enabled, the code will use VectorizedParquetRecordReader, which uses SpecificParquetRecordReaderBase below
* https://github.com/apache/spark/blob/master/sql/core/src/main/java/org/apache/spark/sql/execution/datasources/parquet/SpecificParquetRecordReaderBase.java#L109 This is where the row group filtering is being performed. It calls the method below
* https://github.com/apache/parquet-mr/blob/apache-parquet-1.8.2/parquet-hadoop/src/main/java/org/apache/parquet/filter2/compat/RowGroupFilter.java#L64-L70
The RowGroupFilter constructor used in Spark's {{VectorizedParquetRecordReader}} hard-codes the {{FilterLevel}} used to only {{FilterLevel.STATISTICS}}, and is deprecated.
{code}
@Deprecated
private RowGroupFilter(List<BlockMetaData> blocks, MessageType schema) {
this.blocks = checkNotNull(blocks, "blocks");
this.schema = checkNotNull(schema, "schema");
this.levels = Collections.singletonList(FilterLevel.STATISTICS);
this.reader = null;
{code}
Compare this to {{org.apache.parquet.hadoop.ParquetRecordReader.initialize()}}, which uses the second RowGroupFilter constructor that allows it to set the {{FilterLevel}}. Relevant code here:
https://github.com/apache/parquet-mr/blob/master/parquet-hadoop/src/main/java/org/apache/parquet/hadoop/ParquetRecordReader.java#L166-L182
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)
---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@spark.apache.org
For additional commands, e-mail: issues-help@spark.apache.org