題
我正在嘗試在 pyspark 中定義嵌套的 .json 架構,但無法使 ddl_schema 字串正常作業。
通常在 SQL 中這將是 ROW,我在下面嘗試了 STRUCT 但無法正確獲取資料型別這是錯誤...
ParseException:
mismatched input '(' expecting {<EOF>, ',', 'COMMENT', NOT}(line 6, pos 15)
== SQL ==
driverId INT,
driverRef STRING,
number STRING,
code STRING,
name STRUCT(forename STRING, surname STRING),
---------------^^^
dob DATE,
nationality STRING,
url STRING
資料樣本
-------- ---------- ------ ---- -------------------- ---------- ----------- --------------------
|driverId| driverRef|number|code| name| dob|nationality| url|
-------- ---------- ------ ---- -------------------- ---------- ----------- --------------------
| 1| hamilton| 44| HAM| {Lewis, Hamilton}|1985-01-07| British|http://en.wikiped...|
代碼示例
mnt = "/mnt/dev/root"
env = "raw"
path = "formula1/drivers"
fileFormat = "json"
inPath = f"{mnt}/{env.upper()}/{path}.{fileFormat}"
options = {'header': 'True'}
ddl_schema = """
driverId INT,
driverRef STRING,
number STRING,
code STRING,
name STRUCT(forename STRING, surname STRING),
dob DATE,
nationality STRING,
url STRING
"""
drivers_df = (spark
.read
.options(**options)
.schema(ddl_schema)
.format(fileFormat)
.load(inPath)
)
uj5u.com熱心網友回復:
您對 STRUCT 使用了錯誤的語法。
這是正確的:
name STRUCT<forename:STRING,surname:STRING>
https://spark.apache.org/docs/latest/sql-ref-datatypes.html
(搜索Complex types并選擇 SQL 選項卡)
| 資料型別 | SQL 名稱 |
|---|---|
| 布爾型別 | 布林值 |
| 位元組型別 | 位元組,小音 |
| 短型 | 短小精悍 |
| 整數型別 | 整數,整數 |
| 長型 | 長,大 |
| 浮點型 | 浮動,真實 |
| 雙型 | 雙倍的 |
| 日期型別 | 日期 |
| 時間戳型別 | 時間戳 |
| 字串型別 | 細繩 |
| 二進制型別 | 二進制 |
| 十進制型別 | 十進制、十進制、數字 |
| 年月間隔型別 | 間隔年,間隔年到月,間隔月 |
| DayTimeIntervalType | 間隔日, 間隔日, 間隔日, 間隔日, 間隔日, 間隔小時, 間隔小時, 間隔小時, 間隔時間, 間隔分鐘, 間隔分鐘, 間隔秒 |
| 陣列型別 | 陣列<元素型別> |
| 結構型別 | STRUCT<field1_name: field1_type, field2_name: field2_type, …> 注意:':' 是可選的。 |
| 地圖型別 | MAP<key_type, value_type> |
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/434774.html
標籤:json 阿帕奇火花 pyspark apache-spark-sql ddl
上一篇:加入2個不明確的SQL表
