如何通过案例类从数据框转换为RDD并返回

时间:2019-03-03 11:50:01

标签: apache-spark

我试图弄清楚如何将数据帧转换为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

也许我会用这种方式,否则是否有一些自定义方式来进行投射?

0 个答案:

没有答案