【发布时间】:2018-09-25 22:40:38
【问题描述】:
我有以下案例类:
case class User(userId: String)
以及以下架构:
+--------------------+------------------+
| col_name| data_type|
+--------------------+------------------+
| user_id| string|
+--------------------+------------------+
当我尝试使用spark.read.table("MyTable").as[User] 将DataFrame 转换为键入的Dataset[User] 时,出现字段名称不匹配的错误:
Exception in thread "main" org.apache.spark.sql.AnalysisException:
cannot resolve ''`user_id`' given input columns: [userId];;
是否有任何简单 的方法来解决这个问题而不会破坏 scala 成语并将我的字段命名为 user_id?当然,我的真实表的字段多得多,而且我的案例类/表也多得多,所以为每个案例类手动定义一个Encoder是不可行的(而且我对宏的了解不够,所以这是不可能的;尽管如果存在的话,我很乐意使用它!)。
我觉得我缺少一个非常明显的“将蛇形大小写转换为camelCase = true”选项,因为它几乎存在于我使用过的任何ORM中。
【问题讨论】:
-
我觉得我错过了一个非常明显的“将 snake_case 转换为 camelCase=true” - 你没有。如果我没记错的话,有一些旧的 JIRA 票针对类似的东西,但现在,你必须重命名。
-
@user6910411 Bummer :( 如果你用 JIRA 票回答,我会接受答案。
-
@Gal 三年后,你找到更好的解决方案了吗?
-
@DanielR 不幸的是,没有。如果我的
case class字段代表一个 spark 表,我就辞职了。
标签: scala apache-spark apache-spark-dataset