前言
在Apache Hive中,并没有内置的to_json函数。在Apache Spark SQL中确实有to_json函数,它可以用来将结构化数据(如结构化类型或MAP类型)转换为JSON字符串。这个功能对于需要将表格数据输出为JSON格式的场景非常有用。
函数介绍
to_json(expr [, options])
参数说明
参数 | 类型 | 必需 | 描述 |
---|---|---|---|
expr | 结构化数据类型 | ✓ | 待转换的列或表达式(STRUCT, MAP, ARRAY 等) |
options | MAP<STRING,STRING> | ✗ | 控制 JSON 输出的选项(日期格式、时区处理等),Spark 2.4+ 支持 |
示例
1.支持的数据类型转换
SELECT
to_json(named_struct('name', 'Alice', 'age', 25)) AS struct_example, -- {"name":"Alice","age":25}
to_json(map('id', 1001, 'status', 1)) AS map_example, -- {"id":1001,"status":1}
to_json(array(1, 2, 3)) AS array_example, -- [1,2,3]
to_json(map('a', named_struct('b', 1))) AS example1, ---[{"a":1,"b":2}]
to_json(array(map('a', 1))) AS example2 ---[{"a":1}]
2.嵌套数据结构处理
SELECT to_json(
named_struct(
'user', named_struct('name', 'Bob', 'email', 'bob@example.com'),
'scores', array(95, 87, 92)
)
) AS nested_json;
/*
输出:
{
"user": {
"name": "Bob",
"email": "bob@example.com"
},
"scores": [95,87,92]
}
*/
3.可选参数 options 配置
SELECT to_json(
named_struct('event', 'login', 'timestamp', current_timestamp()),
map(
'timestampFormat', "yyyy-MM-dd HH:mm", -- 自定义时间格式
'ignoreNullFields', 'false' -- 保留NULL字段
)
);
/*
输出示例:
{"event":"login","timestamp":"2023-08-15 14:30"}
*/
SELECT to_json(named_struct('date', current_date()), map('dateFormat', 'dd/MM/yyyy')) AS json;
/*
输出示例:
{"date":"26/06/2025"}
*/
备注:
Spark SQL Programming Guide:提供关于Spark SQL使用的指南,包括如何使用Spark SQL函数。
可以通过以下链接访问:Spark SQL Programming Guide:https://spark.apache.org/docs/latest/sql-programming-guide.html