首页 > 解决方案 > 在 spark 数据框中使用案例类的好处

问题描述

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

标签: scalaapache-sparkcase-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)

fieldNameString一个先决条件,因此您的代码将更加健壮且不易出错。

如果你在 REPL 或 Zeppelin 中做探索性的事情,模式推断非常方便,但不应该在操作代码中使用。

编辑附录:我个人更喜欢使用案例类而不是模式,因为出于类似的稳健性原因,我更喜欢DatasetAPI 而不是DataframeAPI(即)。Dataset[Row]


推荐阅读