展平具有不同数据类型的两个JSON并将它们联接

vr13

我正在尝试展平两个JSON文件(我们称它们为JSON1JSON2)。以下是它们外观的示例。

现在在一个文件中,列数据类型可以是struct,而在另一个文件中,它可以是字符串。最终目标是能够展平这些文件并将数据合并/合并/合并为CSV文件。如何使用Python在Spark中完成此操作?

JSON1:

{
    "result": [
        {
            "promoted_by": "",
            "parent": "",
            "number": "310346",
            "closed_by": {
                "link": "https://abcdev.service-now.com/api/now/table/sys_user/e4b0dd",
                "value": "e4b0dd"
            }
        }
    ]
}

root
 |-- result: struct (nullable = true)
 |    |-- closed_by: struct (nullable = true)
 |    |    |-- link: string (nullable = true)
 |    |    |-- value: string (nullable = true)
 |    |-- number: string (nullable = true)
 |    |-- parent: string (nullable = true)
 |    |-- promoted_by: string (nullable = true)

JSON2:

{
    "result": [
        {
            "promoted_by": "",
            "parent": {
                "link": "https://abcdev.service-now.com/api/now/table/sys_user/ab00f1",
                "value": "ab00f1"
            },
            "number": "310348",
            "closed_by": ""
        }
    ]
}

root
 |-- result: struct (nullable = true)
 |    |-- closed_by: string (nullable = true)
 |    |-- number: string (nullable = true)
 |    |-- parent: struct (nullable = true)
 |    |    |-- link: string (nullable = true)
 |    |    |-- value: string (nullable = true)
 |    |-- promoted_by: string (nullable = true)
黑主教

只需将2个JSON文件读入同一DataFrame中即可。模式将由Spark自动合并。closed_byparent都将是类型struct

df = spark.read.json("dbfs:/mnt/{json1.json,json2.json}", multiLine=True)

df.printSchema()

#root
# |-- result: array (nullable = true)
# |    |-- element: struct (containsNull = true)
# |    |    |-- closed_by: struct (nullable = true)
# |    |    |    |-- link: string (nullable = true)
# |    |    |    |-- value: string (nullable = true)
# |    |    |-- number: string (nullable = true)
# |    |    |-- parent: struct (nullable = true)
# |    |    |    |-- link: string (nullable = true)
# |    |    |    |-- value: string (nullable = true)
# |    |    |-- promoted_by: string (nullable = true)

要展平结构,请使用explode+星号展开结构:

from pyspark.sql import functions as F

df1 = df.select(F.explode("result").alias("results")).select("results.*") \
        .select(
        F.col("number"),
        F.col("closed_by.value").alias("closed_by_value"),
        F.col("closed_by.link").alias("closed_by_link"),
        F.col("parent.value").alias("parent_value"),
        F.col("parent.link").alias("parent_link"),
        F.col("promoted_by")
    )

df1.printSchema()

#root
# |-- number: string (nullable = true)
# |-- closed_by_value: string (nullable = true)
# |-- closed_by_link: string (nullable = true)
# |-- parent_value: string (nullable = true)
# |-- parent_link: string (nullable = true)
# |-- promoted_by: string (nullable = true)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

两个具有不同数据类型的MapRoute

如何让JooQ合并两个不同的表,它们具有相同的列和数据类型?

如何合并具有不同长度和索引的两个 DataFrames 是另一个的子集但它们的数据类型不同?

如何提取具有窗口大小的重叠子阵列并将它们展平

如何创建具有两个不同数据类型的值的键值对?

如果两个表的行在列中具有不同的值,则将它们绑定

如何反序列化具有两个名称相同但元素具有不同数据类型的XML?

具有两个具有不同数据类型的字段的表,其中只有一个用于联接目的,这是一个好的解决方案吗?

我想拆分字符串类型列表并将它们存储在android中的两个不同列表中

使用Bash,如何找到具有两个目录的所有目录并将它们移至复制的树形结构?

在R中合并具有不同数据类型的不同键的两个数据帧

用公共行映射两个不同的数据框并将它们组合在一起

如果两个不同的标准有两种不同的数据类型,它们是否可以与 DLOOKUP 一起使用?

用于具有不同数据类型的两个对象的 C++ 重载 + 运算符

我如何在SSIS中合并两个平面文件具有不同的数据类型

如何合并具有不同数据类型的两个数据?

如何从两个不同的表中获取两个不同列的总和并将它们分组

具有参与者ID和提示的列:将它们分为R中的两个不同列

如何打印两个不同的数据类型数组?

两个LINQ查询返回不同的数据类型

合并两个不同数据类型的数组

在熊猫数据透视表中苦苦挣扎并将它们展平

如何从两个数组中选择成对元素并将它们赋予 JavaScript 中的两个不同函数

在Spark中联接两个具有不同记录和大小的数据框

在具有相同主键但数据不同的两个表上联接

在部分表数据具有不同条件的两个表上左联接

在元数据库中联接具有不同列名的两个SQL表

jQuery在同一函数中使用两个完成的回调,一个具有数据类型json,一个没有

组合两个def后展平类型