常用Spark SQL函数

72 阅读1分钟

cardinality

-- 集合的大小,输出:3
select cardinality(array(1, 2, 3))

split

-- 字符串分割,输出:WrappedArray(a, b, c)
select split('a,b,c', ',')
-- 输出:3
select cardinality(split('a,b,c', ','))

时间格式化/反格式化

-- 格式化,将一个unix时间戳格式化为字符串,format 可选参数
-- from_unixtime(timestamp, format='yyyy-MM-dd HH:mm:ss')
-- 反格式化,将一个时间字符串转换为unix时间戳
-- to_unix_timestamp('2025090210', 'yyyyMMddHH')
select from_unixtime(to_unix_timestamp('2025090210', 'yyyyMMddHH'), 'yyyy-MM-dd HH:mm:ss')

时间函数

函数类型输出
current_date()DateType2025-09-02
now()TimestampType2025-09-02 14:46:55.278
current_timestamp()TimestampType2025-09-02 14:41:15.495
date_trunc(format, timestamp)TimestampType截断到指定精度
date_add(start, days)DateTypedate_add(current_date(), -1)

数据函数

函数功能输出
round(col, scale=None)截断数值精度(四舍五入)round(2.5, 0) = 3 (decimal)

窗口函数

函数功能输出
lag(col, offset=1, default=None)获取当前前n行在某一列的值
  • lag常用于:
    • 比较当前行和上一行的值,如环比、变化监测
    • 标记是否发生变化,如状态转换,分组起点
    • 计算时间差,增量等