在spark数据框中使用案例类有什么优势?我可以使用“ inferschema”选项定义架构,也可以定义Structtype字段。 我介绍了 “ https://docs.scala-lang.org/tour/case-classes.html”,但除了使用反射生成模式之外,无法理解使用案例类的优点。
答案 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)
fieldName
是String
的事实将成为前提,因此您的代码将更健壮且更不易出错。
模式推断非常方便。 Zeppelin,但不应在操作代码中使用。
编辑附录:
我个人更喜欢使用案例类而不是模式,因为出于类似的健壮性原因,我更喜欢Dataset
API比Dataframe
API(即Dataset[Row]
)。