簡體   English   中英

java.lang.ClassCastException: org.apache.spark.sql.catalyst.expressions.GenericRowWithSchema 無法轉換為 t

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM