下面是我的代碼:
val opts = Map("allowUnquotedFieldNames" -> "true")
val df_withSchema = df.withColumn("Data", from_json(col("Item.Data.S"),schema, opts))
以下是錯誤:
(<console>:198: error: overloaded method value from_json with alternatives:
(e: org.apache.spark.sql.Column,schema: org.apache.spark.sql.Column,options: java.util.Map[String,String])org.apache.spark.sql.Column <and>
(e: org.apache.spark.sql.Column,schema: String,options: scala.collection.immutable.Map[String,String])org.apache.spark.sql.Column <and>
(e: org.apache.spark.sql.Column,schema: String,options: java.util.Map[String,String])org.apache.spark.sql.Column <and>
(e: org.apache.spark.sql.Column,schema: org.apache.spark.sql.types.DataType,options: java.util.Map[String,String])org.apache.spark.sql.Column <and>
(e: org.apache.spark.sql.Column,schema: org.apache.spark.sql.types.StructType,options: java.util.Map[String,String])org.apache.spark.sql.Column <and>
(e: org.apache.spark.sql.Column,schema: org.apache.spark.sql.types.DataType,options: scala.collection.immutable.Map[String,String])org.apache.spark.sql.Column <and>
(e: org.apache.spark.sql.Column,schema: org.apache.spark.sql.types.StructType,options: scala.collection.immutable.Map[String,String])org.apache.spark.sql.Column
cannot be applied to (org.apache.spark.sql.Column, org.apache.spark.sql.types.StructType, scala.collection.Map[String,String])
val df_withSchema = df.withColumn("Data", from_json(col("Item.Data.S"),schema, opts))
^
,0,1388)
有人可以幫我理解為什么這段代碼會拋出錯誤以及如何解決這個問題嗎?
背景:
資料元素是存盤為字串的嵌套 JSON。所以我為資料元素定義了一個模式,并使用 from_JSON 將其轉換為 JSON。此外,Data 中的欄位名稱用引號引起來,所以我在這里嘗試使用選項(Map("allowUnquotedFieldNames" -> "true"))
uj5u.com熱心網友回復:
它想要scala.collection.immutable.Map,而你有scala.collection.Map...
我知道,人們會天真地期望能夠使用任何型別的地圖以及承諾不會改變它的代碼,但它不會那樣作業。它實際上是相反的:immutable.Map是Map.
嘗試做opts.toMap,應該可以解決它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/436848.html
標籤:json 斯卡拉 阿帕奇火花 apache-spark-sql
上一篇:SQLServer防火墻規則
