Apache spark 如何从zeppelin sql中提取JSON数据

Apache spark 如何从zeppelin sql中提取JSON数据,apache-spark,apache-zeppelin,Apache Spark,Apache Zeppelin,我请求在齐柏林飞艇上测试tbl表。 表数据结构如下所示: %sql desc stg.test_tbl col_name | data_type | comment id | string | title | string | tags | string | tags列的数据JSON类型如下: {“姓名”:[{“家庭”:空,第一个”:“纳尔逊”},{“位置代码”:{“房子”:“tlv”,“id”:“A12YR”}]} 我希望看到带有列的JSON数据,

我请求在齐柏林飞艇上测试tbl表。 表数据结构如下所示:

%sql
desc stg.test_tbl
col_name | data_type | comment
id       |  string   |
title    |  string   |
tags     |  string   |
tags列的数据JSON类型如下:

{“姓名”:[{“家庭”:空,第一个”:“纳尔逊”},{“位置代码”:{“房子”:“tlv”,“id”:“A12YR”}]}

我希望看到带有列的JSON数据,因此我的查询是:

select *, tag.*
from stg.test_tbl as t
lateral view explode(t.tags.name) name as name
lateral view explode(name.pos_code) pos_code as pos_code
但当我查询时,它会返回

Can't extract value from tags#3423: need struct type but got string; line 3 pos 21
set zeppelin.spark.sql.stacktrace = true to see full stacktrace

我应该在where语句中查询为字符串吗?

您可以在json的字符串类型中使用get_json_对象。 另外,如果JSON是数组类型,则

{"name":[{"family": null, "first": "nelson"}, {"pos_code":{"house":"tlv", "id":"A12YR"}}]}
,您可以按如下键进行查询:

select * from stg.test_tbl as t
where t.pos_code[0].house = "tlv"

数据类型是string,而不是struct。json数据被视为字符串,因此您不能使用struct。@Lamanus您是对的,我不知道列类型是字符串,而不是json类型的数组。因此,我使用get_json_对象查询字符串类型的数据