Преимущество использования класса case в искровом фрейме
В чем преимущество использования case-класса в искровом фрейме? Я могу определить схему, используя опцию "inferschema" или определить поля типа Structtype. Я ссылался на " https://docs.scala-lang.org/tour/case-classes.html", но не мог понять, каковы преимущества использования класса case помимо генерации схемы с использованием отражения.
1 ответ
inferschema может быть дорогостоящей операцией и будет излишне откладывать поведение ошибки. рассмотрим следующий псевдокод
val df = loadDFWithSchemaInference
//doing things that takes time
df.map(row => row.getAs[String]("fieldName")).//more stuff
Теперь в вашем этом коде у вас уже есть предположение, испеченное в том, что fieldName
имеет тип String
но это только выражено и гарантировано поздно в вашей обработке, приводящей к печальным ошибкам в случае, если это не было на самом деле String
теперь, если вы сделаете это вместо
val df = load.as[CaseClass]
или же
val df = load.option("schema", predefinedSchema)
дело в том, что fieldName
это String
будет предварительным условием, и, следовательно, ваш код будет более надежным и менее подверженным ошибкам.
Вывод схемы очень удобен, если вы делаете исследовательские действия в REPL или, например, Zeppelin, но не должны использоваться в операционном коде.
Изменить приложение: я лично предпочитаю использовать классы дел над схемами, потому что я предпочитаю Dataset
API для Dataframe
API (который является Dataset[Row]
) по аналогичным причинам надежности.