Spark DDL 架构 JSON 结构

0 ddl json apache-spark apache-spark-sql pyspark

问题

我试图在 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
Run Code Online (Sandbox Code Playgroud)

数据样本

            +--------+----------+------+----+--------------------+----------+-----------+--------------------+
            |driverId| driverRef|number|code|                name|       dob|nationality|                 url|
            +--------+----------+------+----+--------------------+----------+-----------+--------------------+
            |       1|  hamilton|    44| HAM|   {Lewis, Hamilton}|1985-01-07|    British|http://en.wikiped...|
Run Code Online (Sandbox Code Playgroud)

代码示例

            +--------+----------+------+----+--------------------+----------+-----------+--------------------+
            |driverId| driverRef|number|code|                name|       dob|nationality|                 url|
            +--------+----------+------+----+--------------------+----------+-----------+--------------------+
            |       1|  hamilton|    44| HAM|   {Lewis, Hamilton}|1985-01-07|    British|http://en.wikiped...|
Run Code Online (Sandbox Code Playgroud)

Dav*_*itz 6

您对 STRUCT 使用了错误的语法。
\n这是正确的:

\n
name STRUCT<forename:STRING,surname:STRING>\n
Run Code Online (Sandbox Code Playgroud)\n

https://spark.apache.org/docs/latest/sql-ref-datatypes.html
\n(搜索Complex types并选择 SQL 选项卡)

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n
数据类型SQL名称
布尔类型布尔值
字节类型字节、小整型
短型短小号
整数类型整型、整数
长类型长整型
浮点型浮动,实数
双型双倍的
日期类型日期
时间戳类型时间戳
字符串类型细绳
二进制类型二进制
小数类型小数、DEC、数字
年月间隔类型间隔年、间隔年到月、间隔月
DayTimeInterval类型间隔日、间隔日到小时、间隔日到分钟、间隔日到秒、间隔小时、间隔小时到分钟、间隔小时到秒、间隔分钟、间隔分钟到秒、间隔秒
数组类型数组<元素类型>
结构体类型STRUCT<field1_name: field1_type, field2_name: field2_type, \xe2\x80\xa6> 注意:\xe2\x80\x98:\xe2\x80\x99 是可选的。
地图类型MAP<键类型,值类型>
\n