我是Apache Spark的新手,正在尝试比较两个json文件。我的要求是找出添加、删除或修改了哪个键/值,以及它的路径是什么。
为了解释我的问题,我在这里分享了我尝试过的一个小json示例的代码。
样本Json 1为:
{
"员工">
样本Json 2是:
{
"员工">
我的代码是:
//Compare two multiline json files
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
//Load first json file
val jsonData_1 = sqlContext.read.json(sc.wholeTextFiles("D:\File_1.json").values)
//Load second json file
val jsonData_2 = sqlContext.read.json(sc.wholeTextFiles("D:\File_2.json").values)
//Compare both json files
jsonData_2.except(jsonData_1).show(false)
我在执行此代码时得到的输出是:
+--------------------+
|employee |
+--------------------+
|{true, sonoo, 58000}|
+--------------------+
但这里只有一个字段,即salary被修改,因此输出应该只是带路径的更新字段。
以下是预期输出的详细信息:
[
{
"op" : "replace",
"path" : "/employee/salary",
"value" : 58000
}
]
有人能给我指正确的方向吗?
假设每个json都有一个标识符,并且您有两个json组(例如文件夹(,您需要比较两个组中的json:
- 将每个组的json加载到一个数据帧中,提供与son的结构匹配的模式。在此之后,您将获得两个数据帧
- 通过连接标识符来比较json(现在数据帧中的行(,查找不匹配的值