Scala使用Json4s的JsonMethods解析JSON字符串触发参数不匹配报错
问题根因
- Spark 运行环境内置了对应版本的 json4s 依赖,你手动引入的
json4s-native_2.11-3.6.7.jar与 Spark 内置版本不兼容,导致类加载异常,支持 String 类型入参的隐式转换失效 - 部分版本的 json4s 需要额外导入隐式转换类,才支持将 String 自动转为 parse 方法要求的 JsonInput 类型参数
解决方案
方案1:优先使用Spark内置版本json4s
启动 spark-shell 时去掉 --jars 手动加载的外部 json4s 包,启动后执行如下代码:
import org.json4s._ import org.json4s.native.JsonMethods._ // 导入隐式转换,支持String作为parse方法入参 import org.json4s.Implicits._ val customJson = """{ "empId":"100", "empSkils": ["hadoop", "spark"] }""" val parsedJson = parse(customJson) // 打印验证解析结果 println(parsedJson)
正常解析后会输出结果:JObject(List((empId,JString(100)), (empSkils,JArray(List(JString(hadoop), JString(spark))))))
方案2:必须使用3.6.7版本json4s的场景
启动 spark-shell 时修改参数,优先加载你指定的外部 jar 避免版本冲突:
spark-shell --conf spark.driver.userClassPathFirst=true --jars /home/training/surender_hadoop/jars/json4s-native_2.11-3.6.7.jar
启动后再执行方案1中的 Scala 代码即可完成解析。
内容的提问来源于stack exchange,提问作者Surender Raja
相关产品推荐
相关产品推荐

