使用apachespark比较两个json文件

qvk1mo1f  于 2021-07-14  发布在  Spark
关注(0)|答案(1)|浏览(350)

我是apachespark新手,我正在尝试比较两个json文件。我的要求是找出哪个键/值被添加、删除或修改,以及它的路径是什么。
为了解释我的问题,我在这里用一个小json示例来分享我尝试过的代码。
示例json 1是:
{
“员工”:{
“name”:“索诺”,
“工资”:57000,
“已婚”:没错
} }
示例json 2是:
{
“员工”:{
“name”:“索诺”,
“工资”:58000,
“已婚”:没错
} }
我的代码是:

//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
  }
]

有人能给我指出正确的方向吗?

x3naxklr

x3naxklr1#

假设每个json都有一个标识符,并且您有两个json组(例如文件夹),您需要比较两个组中的json:
将每个组的json加载到一个Dataframe中,提供一个与子结构匹配的模式。在此之后,您有两个Dataframe。
通过连接标识符来比较json(现在是Dataframe中的行),寻找不匹配的值。

相关问题