在Spark数据框中使用案例类的好处

时间:2018-10-25 08:37:37

标签: scala apache-spark case-class

在spark数据框中使用案例类有什么优势?我可以使用“ inferschema”选项定义架构,也可以定义Structtype字段。 我介绍了 “ https://docs.scala-lang.org/tour/case-classes.html”,但除了使用反射生成模式之外,无法理解使用案例类的优点。

1 个答案:

答案 0 :(得分:1)

推理模式可能是一项昂贵的操作,并且会不必要地推迟错误行为。考虑以下伪代码

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

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