scala - 在 spark 数据框中使用案例类的好处
问题描述
在 spark 数据框中使用案例类有什么好处?我可以使用“inferschema”选项定义架构或定义 Structtype 字段。我提到了“ https://docs.scala-lang.org/tour/case-classes.html ”,但除了使用反射生成模式之外,我不明白使用案例类的优势是什么。
解决方案
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]
推荐阅读
- spring-boot - 将http请求数据存储在同步队列中,在spring boot中一一执行
- javascript - $.ajax(...) 不是函数
- python - 如何从 Python/Flask 应用程序将 .txt 文件部署到 PythonAnywhere
- python - 为什么我在使用 Tweepy 下载用户时间线时收到错误消息
- javascript - 如何重新排序数组以避免连续重复
- java - 片段强制关闭中的 DatePickerDialog
- discord.py - Discord.py 重写 Giphy Cog 错误:未闭合的连接器
- html - 制作一个正方形的img元素
- javascript - 如何使用 JScript 制作搜索栏?
- c - 监控 C 中的所有子进程