Spark SQL from_json 文档

Posted

技术标签:

【中文标题】Spark SQL from_json 文档【英文标题】:Spark SQL from_json documentation 【发布时间】:2018-05-16 14:06:03 【问题描述】:

在哪里可以找到有关 Spark SQL 中 from_json 函数的 schema 参数的更多详细信息?一位同事给了我一个可行的模式示例,但老实说,我只是不明白,它看起来不像我迄今为止找到的任何示例。找到的文档here 似乎缺少。

【问题讨论】:

【参考方案1】:

在您分享的链接中,from_json 函数使用此示例:

SELECT from_json('"a":1, "b":0.8', 'a INT, b DOUBLE');

Spark SQL 支持绝大多数 Hive 功能,例如 defining TYPES

我遇到的示例问题要求我解析以下 JSON 对象:

'data': [
    
       "id":02938, 
       "price": 2938.0, 
       "quantity": 1
    , 
    
       "id":123, 
       "price": 123.5, 
       "quantity": 2
    
]

相应的 Spark SQL 查询如下所示:

SELECT 
    from_json('"data":["id":123, "quantity":2, "price":39.5]'), 
    'data array<struct<id:INT, quantity:INT, price:DOUBLE>>').data) AS product_details;

您可以将此与explode 函数结合使用,以将每个元素提取到它自己的列中。

我推荐这个post 来了解更多关于构造查询类型的信息。

有关更多示例,请参阅此 SO 帖子 https://***.com/a/55432107/1500443

【讨论】:

示例给出错误 IndentationError: unexpected indent this works: SELECT from_json( '"data":["id":123, "quantity":2, "price":39.5] ', '数据数组>') AS product_details;【参考方案2】:

看起来您可以将 JSON 传递给 schema_of_json 函数以获取架构,因此无论 JSON 是什么,我都使用它来获取正确的架构:

SELECT from_json(col, schema_of_json(col))

在您的情况下,您还需要将map('allowNumericLeadingZeros', 'true') 添加到两个函数调用中,因此:

SELECT from_json(
    col,
    schema_of_json(col, map('allowNumericLeadingZeros', 'true')),
    map('allowNumericLeadingZeros', 'true')
  )

【讨论】:

以上是关于Spark SQL from_json 文档的主要内容,如果未能解决你的问题,请参考以下文章

Spark2 Kafka结构化流Java不知道from_json函数

如何将 from_json 与 Kafka connect 0.10 和 Spark Structured Streaming 一起使用?

Spark 1.3.x 的 org.apache.spark.sql.cassandra 的 API 文档在哪里?

《Spark Python API 官方文档中文版》 之 pyspark.sql

Apache Spark 2.2.0 中文文档 - Spark SQL, DataFrames and Datasets Guide | ApacheCN

Apache Spark 2.2.0 中文文档 - Spark Streaming 编程指南 | ApacheCN