Преимущество использования класса 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]) по аналогичным причинам надежности.

Другие вопросы по тегам