Мне любопытно, есть ли существенная разница в производительности между использованием схем, определенных в классах случаев Scala, и определением схем с помощью Apache Avro для наборов данных Spark.В настоящее время у меня есть схема, которая выглядит примерно так:
root
|-- uniqueID: string (nullable = true)
|-- fieldCount: integer (nullable = false)
|-- fieldImportance: integer (nullable = false)
|-- fieldPrimaryName: string (nullable = true)
|-- fieldSecondaryName: string (nullable = true)
|-- samples: map (nullable = true)
| |-- key: string
| |-- value: struct (valueContainsNull = true)
| | |-- value1: byte (nullable = false)
| | |-- value2: byte (nullable = false)
| | |-- value3: byte (nullable = false)
С соответствующим классом дел, похожим на
case class FieldSample(uniqueID: String,
fieldCount: Int,
fieldImportance: Int,
fieldPrimaryName: Int,
fieldSecondaryName: Int,
samples: Map[String, ValueStruct])
case class ValueStruct(value1: Byte,
value2: Byte,
value3: Byte)
Я реализовал это с использованием классов дел Scala, но вижу довольнобольшое узкое место при чтении с диска.Данные сохраняются на диске в формате паркета.Что меня интересует, так это то, есть ли какие-либо преимущества в производительности при использовании схем Avro по сравнению с классами случаев scala в этом случае.Я предполагаю, что вложенная схема вызывает медленное чтение паркета, поэтому мне интересно, дает ли сериализация Avro какие-либо улучшения производительности таким образом.Спасибо!