首页 > 解决方案 > java.lang.ClassCastException: org.apache.spark.sql.catalyst.expressions.GenericRowWithSchema 不能被强制转换

问题描述

我正在尝试将数据框中的行转换为案例类并出现以下错误

2019-08-19 20:13:08 任务 1 的执行程序任务启动工作程序错误执行程序:91 - 阶段 1.0(TID 1)中任务 0.0 中的异常 java.lang.ClassCastException:org.apache.spark.sql.catalyst.expressions .GenericRowWithSchema 不能转换为 Models.City

Sample Log = {"Id": "1","City": {"name": "A","state": "B"}}

下面是读取包含json格式数据的文本文件的代码,该文件抛出错误

case class City(name: String, state: String)

val file = new File("src/test/resources/log.txt")
val logs = spark.
  read.
  text(file.getAbsolutePath).
  select(col("value").
    as("body"))
import spark.implicits._
var logDF: DataFrame = spark.read.json(logs.as[String])
logDF.map(row => row.getAs[City]("City").state).show()

由于某些限制,基本上我无法对数据框本身执行任何操作。所以给定一行我们如何将它转换为案例类(我不能在这里使用匹配模式,因为案例类可以有很多字段和嵌套案例类)

提前致谢。任何帮助是极大的赞赏!!

标签: scalaapache-spark-sql

解决方案


推荐阅读