[英]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
是一个数组。 在这种情况下,您需要通过以下操作来做到这一点:
select("members")
选择members
字段explode
函数 ( doc ) 分解members
字段像这样的东西:
select col.* from (select explode(data.members) as col from vw_TestView)
PS 所有这些也可以直接通过 PySpark 完成。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.