我目前正在學習 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. ..........
uj5u.com熱心網友回復:
問題是這members是一個陣列。在這種情況下,您需要通過以下操作來做到這一點:
- 選擇
members欄位使用select("members") members使用explode函式 ( doc )分解場- 從底層結構中提取資料
像這樣的東西:
select col.* from (select explode(data.members) as col from vw_TestView)
PS 所有這些也可以直接通過 PySpark 完成。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/322626.html
標籤:阿帕奇火花 火花 apache-spark-sql 数据块 三角洲湖
上一篇:SparkSession/SparkContext/RDD上是否有任何穩定的方法可以呼叫以輕松檢測何時發生驅逐?
