【问题标题】:Compare two Json files using Apache Spark使用 Apache Spark 比较两个 Json 文件
【发布时间】:2021-07-08 11:10:34
【问题描述】:

我是 Apache Spark 的新手,我正在尝试比较两个 json 文件。 我的要求是找出添加、删除或修改哪个键/值以及它的路径。

为了解释我的问题,我在这里分享我用一个小的 json 示例尝试过的代码。

示例 Json 1 是:

{
“员工”:{
"名称": "sonoo",
“薪水”:57000,
“已婚”:是的
} }

示例 Json 2 是:

{
“员工”:{
"名称": "sonoo",
“工资”: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
  }
]

谁能指出我正确的方向?

【问题讨论】:

    标签: json apache-spark compare difference


    【解决方案1】:

    假设每个 json 都有一个标识符,并且您有两个 json 组(例如文件夹),您需要对两组中的 json 进行黑白比较:

    1. 将每个组的 json 加载到数据框中,提供与子结构匹配的架构。在此之后,您有两个数据框。
    2. 通过加入标识符来比较 json(现在是数据框中的行),查找不匹配的值。

    【讨论】:

    • 感谢您的回复。由于我是 Apache Spark 的新手,您能否在答案中提供任何示例代码?
    猜你喜欢
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    • 2017-01-31
    • 2014-02-10
    相关资源
    最近更新 更多