apache-spark - 如何从数据框转换为 RDD 并使用案例类返回
问题描述
我试图弄清楚如何将数据帧转换为 RDD(以便我可以进行配对操作)并再次返回。目前,当我这样做时,出现“无法将 GenericRowWithSchema 强制转换为 SaltedUser”的异常
我从一个案例类开始
case class SaltedUser(salt: Long, userId: Long)
接下来我创建一个数据框
scala> Seq((1, SaltedUser(1, 1)), (2, SaltedUser(2, 2)), (3, SaltedUser(3, 3))).toDF("key", "SaltedUser").show
+---+----------+
|key|SaltedUser|
+---+----------+
| 1| [1, 1]|
| 2| [2, 2]|
| 3| [3, 3]|
+---+----------+
现在,如果我要将其转换为 RDD(例如,因为我想做一个 reduceByKey)并将其转换回来
scala> Seq((1, SaltedUser(1, 1)), (2, SaltedUser(2, 2)), (3, SaltedUser(3, 3))).toDF("key", "SaltedUser").rdd.map(r => (r.getInt(0), r.getAs[SaltedUser](1))).toDF.show
这会引发以下异常:
Caused by: java.lang.ClassCastException: org.apache.spark.sql.catalyst.expressions.GenericRowWithSchema cannot be cast to SaltedUser
也许我正在以王的方式来解决这个问题,或者有一些自定义的方式来进行铸造?
解决方案
推荐阅读
- javascript - 在循环中多次覆盖元素的样式?
- ios - 错误:方法不会覆盖其超类中的任何方法
- owasp - 如何在 OWASP Zap (GUI) 自动攻击中指定 URL 参数
- python - 转换表以平滑一列中的记录
- android-studio - 无法在 Android Studio 中的“FileMapping”中打开库
- mongodb - Mongodbd 使用 Mongoose 登录到新数据库
- ios - 将 ios13.1 升级到 13.2 的问题 - NavigationLink - 试图弹出到不存在的视图控制器
- python - if语句中的Python生命变量
- sql - 具有多个用户的区域映射
- datatable - 我们如何通过仅在 webix 中指定自定义过滤器名称来重新过滤数据表?