在 spark 数据框中使用 case class 的好处

Benefit of using case class in spark dataframe

在 spark dataframe 中使用 case class 有什么好处?我可以使用 "inferschema" 选项定义架构或定义 Structtype 字段。 我提到 “https://docs.scala-lang.org/tour/case-classes.html”但无法理解除了使用反射生成模式之外使用案例 class 的优势是什么。

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 但不应在操作代码中使用。

编辑附录: 我个人更喜欢使用 case 类 而不是 schemas,因为我更喜欢 Dataset API 而不是 Dataframe API(即 Dataset[Row])稳健性原因。