繁体   English   中英

Databricks Delta Lake - 从 JSON 文件读取数据

[英]Databricks Delta Lake - Reading data from JSON file

我目前正在学习 Databricks 并使用 Python (pyspark) 和 SQL 的组合进行数据转换。

截至目前,我有一个以下格式的 json 文件:

{
    "issuccess": true,
    "jobProcess": "usersList",
    "data": {
        "members": [
            {
                "id": "bot1",     
                "name": "databot",
                "active": true,
                "profile": {
                    "title": "Test Bot",
                    "phone": "1234"
                 },
                 "is_mailbox_active": true
             },
             {
                ....
             }
         ]
     }
}

我可以将这些数据转储到临时视图中。 遵循 Python (PySpark) 逻辑:

 usersData = spark \
                .read \
                .option("multiLine", True) \
                .option("mode", "PERMISSIVE") \
                .json("C:\\Test\data.json") \
                .createOrReplaceTempView("vw_TestView")

如上所述, vw_TestView 数据采用struct<members:array<struct<....格式。

柱子 数据类型
成功 布尔值
作业流程 细绳
数据 struct<members:array<struct<id:string, ....>

作为输出,我只需要以正确的格式从“数据”列数组的成员中选择/显示数据。

执行select * from预计会返回“结果太大......”错误。 此外,由于我最终需要从“数据”列中选择特定内容,因此如何为上述视图构建正确的选择查询。

选择查询输出必须如下所示:

ID 姓名 轮廓
机器人1 数据机器人 { "title": "Test Bot","phone": "1234"}
机器人2 用户机器人 { "title": "User Bot","phone": "7890"}

如何做到这一点?

我试过表演

%sql
select data.members.* from vw_TestView

但这不适用于“data.members”列的数据类型,并且出现以下消息的错误:

Can only star expand struct data types.  ..........

问题是members是一个数组。 在这种情况下,您需要通过以下操作来做到这一点:

  1. 使用select("members")选择members字段
  2. 使用explode函数 ( doc ) 分解members字段
  3. 从底层结构中提取数据

像这样的东西:

select col.* from (select explode(data.members) as col from vw_TestView)

PS 所有这些也可以直接通过 PySpark 完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM