[英]java.lang.ClassCastException: org.apache.spark.sql.catalyst.expressions.GenericRowWithSchema cannot be case to com.streamsets.pipeline.api.Record
[英]java.lang.ClassCastException: org.apache.spark.sql.catalyst.expressions.GenericRowWithSchema cannot be cast t
我正在嘗試將 dataframe 中的行轉換為案例 class 並出現以下錯誤
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()
由於某些限制,基本上我無法對 dataframe 本身執行任何操作。 所以給定一行我們如何將它轉換為案例 class(我不能在這里使用匹配模式,因為案例 class 可以有很多字段和嵌套的案例類)
提前致謝。 任何幫助是極大的贊賞!!
我遇到了同樣的問題(Spark SQL 3.1.3)。 解決方案是使用 Spark 將 Dataframe 轉換為 Dataset,然后訪問字段。
import spark.implicits._
var logDF: DataFrame = spark.read.json(logs.as[String])
logDF.select("City").as[City].map(city => city.state).show()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.