【发布时间】:2021-12-04 07:15:46
【问题描述】:
我目前正在学习 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
| Column | DataType |
|---|---|
| issuccess | boolean |
| jobProcess | string |
| data | struct<members:array<struct<id:string, ....> |
作为输出,我只需要以适当的格式从 'data' 列数组的 members 中选择/显示数据。
执行 select * from 预计会返回“结果太大....”错误。 另外,由于我最终需要从 'data' 列中选择特定内容,我如何才能为上述视图构建适当的选择查询。
选择查询输出必须如下所示:
| id | name | profile |
|---|---|---|
| bot1 | databot | { "title": "Test Bot","phone": "1234"} |
| bot2 | userbot | { "title": "User Bot","phone": "7890"} |
如何做到这一点?
我试过表演
%sql
select data.members.* from vw_TestView
但 'data.members' 列的数据类型不支持此操作,并且会出现以下错误消息:
Can only star expand struct data types. ..........
【问题讨论】:
标签: apache-spark pyspark apache-spark-sql databricks delta-lake