我们正在使用Parquet,Avro和Spark进行分析。
我们的查询时间大约有40-50%用于反序列化数据。这是Parquet-Avro互动(AvroRecordMaterializer)构建Avro的GenericRecords。我们通过使用带有虚拟记录物理化器的自定义ReadSupport类来确定这一点(它对传递给它的数据没有任何作用)。
我们在优化这一领域有哪些选择?我们可以远离Avro,但是使用protobufs我们观察到可比的开销。其他人如何克服反序列化开销?
此外,似乎即使谓词下推(Filter2 API)与某些行不匹配,我们仍然会看到基于元数据检查未排除行组的情况的开销。当Parquet谓词不匹配时,我们如何避免整个记录反序列化?
谢谢!