Scala中Json4s:如何创建空的JValue实例
可以直接创建空的JValue,完全不需要用
parse("{}")绕弯 在json4s库中,你可以直接用JObject.empty来创建对应{}的空JSON对象(也就是你需要的空JValue),和parse("{}")效果完全一致,但更直接高效。用它作为合并的初始值,合并后的JSON不会引入多余的空结构,自然就省去了后续移除第一行的步骤。
修改后的代码示例
import org.json4s._ import org.json4s.jackson.JsonMethods._ import org.apache.spark.sql.SparkSession // 初始化SparkSession(原代码可能遗漏了这部分) val spark = SparkSession.builder().appName("JsonMerge").master("local[*]").getOrCreate() import spark.implicits._ // 直接创建空的JObject作为合并起点 var mergedJValue: JValue = JObject.empty val a = parse(""" {"name":"Scott", "age":33} """) val b = parse(""" {"name":"Scott", "location":"London"} """) // 合并多个JSON对象 mergedJValue = mergedJValue.++(a) mergedJValue = mergedJValue.++(b) // 直接生成DataFrame,无需过滤行 val df = spark.read.json(Seq(compact(render(mergedJValue))).toDS()) df.show()
关键说明
JObject.empty是json4s提供的空JSON对象常量,和parse("{}")生成的实例完全等价,但不需要解析字符串,性能更好。- 合并后的
mergedJValue会直接得到合并后的完整JSON对象:{"name":"Scott","age":33,"location":"London"},生成的DataFrame包含正确的一行数据,无需再做RDD过滤操作。 - 如果你的场景是要合并多个JSON对象为一个数组(而非单个对象),那初始值应该用
JArray(Nil),后续用:+操作添加元素即可。
内容的提问来源于stack exchange,提问作者Raz
相关产品推荐
相关产品推荐

