from_csv:CSV 字符串解析
速查结论
from_csv(csvStr, schema[, options]) 是 Spark SQL 中用于将 CSV 字符串解析为结构体的函数。需要指定目标 schema(DDL 字符串或 STRUCT 类型),可选 options 控制分隔符、日期格式等解析行为。
语法
from_csv(csvStr, schema[, options])
参数说明
| 参数 | 说明 |
|---|---|
csvStr | 待解析的 CSV 格式字符串 |
schema | 目标 schema,DDL 字符串格式(如 'a INT, b DOUBLE') |
options | 可选,解析选项的 Map(如 map('timestampFormat', 'dd/MM/yyyy')) |
返回值:按 schema 解析出的结构体。
Since: 3.0.0
示例
基础解析
-- DDL 字符串指定 schema
SELECT from_csv('1, 0.8', 'a INT, b DOUBLE');
-- 结果: {"a":1,"b":0.8}
带 options 解析
-- 指定日期格式
SELECT from_csv('26/08/2015', 'time Timestamp', map('timestampFormat', 'dd/MM/yyyy'));
-- 结果: {"time":2015-08-26 00:00:00}
常见报错与避坑指南
列数与 schema 不匹配
CSV 列数必须与 schema 定义的字段数一致,否则解析失败。
-- 错误写法:3个字段但 CSV 只有2列
SELECT from_csv('1, 0.8', 'a INT, b DOUBLE, c STRING');
-- 返回 NULL 或报错
-- 正确写法:列数与 schema 匹配
SELECT from_csv('1, 0.8', 'a INT, b DOUBLE');
类型不兼容
CSV 中的值必须能转换为 schema 中指定的类型。
-- 错误写法:'abc' 无法转为 INT
SELECT from_csv('abc, 0.8', 'a INT, b DOUBLE');
-- 返回 NULL
-- 正确写法:类型匹配
SELECT from_csv('1, 0.8', 'a INT, b DOUBLE');
📱关注公众号
「数据仓库技术」文章同步更新,不错过每一篇干货

💬加群交流
备注「数据仓库技术」加入社群,每日一道大厂SQL真题
