如何处理scala中解析json的异常
我试图从数据帧中的列中提取json块如何处理scala中解析json的异常,scala,apache-spark,Scala,Apache Spark,我试图从数据帧中的列中提取json块 val jsonSchema = StructType( Seq( StructField("json_blob", StructType( Seq( StructField("my_field", MapType(StringType, Str
val jsonSchema = StructType(
Seq(
StructField("json_blob",
StructType(
Seq(
StructField("my_field", MapType(StringType, StringType, true))
)
)
)
)
)
val mydf =
mydf_withjson
.withColumn("json", from_json($"raw_json", jsonSchema))
.select("*", "json.*")
这是个例外
org.apache.spark.sql.AnalysisException: Can't extract value from raw_json: need struct type but got string;
这是我在标题中的错误。我认为这意味着其中一些是json,一些是字符串,或者可能只是空的。当
json\u blob
是一个字符串时,有没有一种方法可以添加对这种情况的支持?你能给我们一个演示文件,让我们可以测试一下吗?
我的第一个想法是检查“raw_json”列是否包含“{”和“}”,但如果不测试它,我不知道这是否有效
val mydf =
mydf_withjson
.withColumn("json", when($"raw_json".contains("{"), from_json($"raw_json", jsonSchema).otherwise($"raw_json"))
.select("*", "json.*")
将错误放在问题文本中而不是标题中,然后给问题一个更好的标题。我得到这个错误:当包含(
raw_json
,“{”)时无法解析“CASE”,然后是JSONStructs(raw_json
)ELSEraw_json
END'由于数据类型不匹配:THEN和ELSE表达式应为相同类型或可强制为公共类型;;