1. 概述
Spark 支持的数值类型主要包括以下几种:整数类型(Short/Int/Long), 浮点类型(Float/Double), 十进制类型(Decimal)。在观远BI中,也兼容来自于不同类型数据库的其它类型;不过在非直连数据集的使用过程中,默认会把数值转换为整数类型(Int、Long)、浮点类型(Double)来展示和计算,小数位默认展示前6位。
本文将介绍常用的数值转换和数学计算函数。统计类函数请参考 聚合统计函数、非聚合统计函数。
2. 函数列表
2.1. 精度处理和转换
用途 | 函数 | 示例 | 结果 |
向上取整 | ceil(expr) / ceiling(expr) | ceil(-0.1) | 0 |
向下取整 | floor(expr) | floor(4.12) | 4 |
使用四舍五入(HALF_UP)模式将数值舍入到指定小数位 | round(expr,d) | round(118.5, 0) | 119 |
format_number(expr1, expr2) 返回string | format_number(10.123456, 4) | '10.1235' |
使用半偶数舍入(HALF_EVEN)模式将数值舍入到指定小数位 | bround(expr, d) 当被舍位是5,后面还有非0值则进1;后面无数字或为0时,前一位是偶数则舍,是奇数则进1,目标是让被舍前一位变成偶数。 | bround(118.5, 0) bround(119.5, 0) | 118 120 |
|
把小数四舍五入到整数 (返回浮点数,0个小数位) | rint(expr) | rint(10.123456) | 10 |
返回数值的负值(正负值符号对调) | negative(expr) | negative(1) | -1 |
判断数值的正负,正负零分别返回1、-1、0 | sign(expr) / signum(expr) | sign(10) | 1 |
转换数值格式为int | int(expr) | int('10.1') | 10 |
转换数值格式为bigint | bigint(expr) | bigint('10.1') | 10 |
转换数值格式为double(双精度浮点) | double(expr) | double(10) | 10.0 |
转换数值格式为float(单精度浮点) | float(expr) | float(10) | 10.0 |
转换数值格式为decimal | decimal(expr) (默认精度为decimal(10,0)) | decimal(10.123456) | 10 |
转换字段格式为目标格式 | cast(expr AS type) | cast(10.00 as int) | 10 |
cast(10.123456 as decimal(10,2)) | 10.12 |
把字符串类型数值转换为数值 | to_number(str, fmt) | to_number('12,345', '99,999') | 12345 |
to_number('$78.12', '$99.99') | 78.12 |
转换数值为指定格式字符串 | to_char(number, fmt) to_varchar(number, fmt) | to_char(78.12, '$99.99') | '$78.12' |
2.2. 数学计算
用途 | 函数 | 示例 | 结果 |
绝对值 | abs(expr) | abs(-1) | 1 |
两数相除的余数(作用同%) | mod(expr1,expr2) | mod(2,1.8) | 0.2 |
返回数值的负值(正负值符号对调) | negative(expr) | negative(1) | -1 |
计算一个数的幂次方 | pow(expr1, expr2) power(expr1, expr2) | pow(2, 3) | 8 |
计算一个非负数的算术平方根 | sqrt(expr) | sqrt(4) | 2 |
计算一个数的立方根 | cbrt(expr) | cbrt(27) | 3 |
计算0-20内数的阶乘 (expr非整数则截尾取整) | factorial(expr) | factorial(5) | 120 |
取对数 (以base为底,求expr对数,默认为自然对数底) | log(base, expr) | log(10, 100) | 2 |
以10为底的对数 | log10(expr) | log10(100) | 2 |
以2为底的对数 | log2(expr) | log2(16) | 4 |
计算较小数字的自然对数(作用同log(1 + expr)) | log1p(expr) | log1p(0.01) | 0.00995 |
将弧度转化为角度 | degrees(expr) | degrees(3.141592653589793) | 180 |
把角度转换为弧度 | radians(expr) | radians(180) | 3.141593 |
自然底数e(欧拉数) | e() | e() | 2.718282 |
返回e的n次幂 | exp(expr) | exp(0) | 1 |
返回e的n次幂-1(作用同 exp(expr) - 1) | expm1(expr) | expm1(0) | 0 |
π值 | pi() | pi() | 3.141593 |
2.3. 三角函数
用途 | 函数 | 示例 | 结果 |
反余弦 | acos(expr) | acos(0) | 1.570796 |
反双曲余弦 | acosh(expr) | acosh(1) | 0 |
反正弦 | asin(expr) | asin(1) | 1.570796 |
反双曲正弦 | asinh(expr) | asinh(1) | 0.881374 |
反正切 | atan(expr) | atan(1) | 0.785398 |
返回x、y坐标的反正切值 | atan2(exprY, exprX) | atan2(2, 2) | 0.785398 |
反双曲正切 | atanh(expr) | atanh(0.5) | 0.549306 |
余弦 | cos(expr) | cos(1) | 0.540302 |
双曲余弦 | cosh(expr) | cosh(1) | 1.543081 |
余切 | cot(expr) | cot(1) | 0.642093 |
余割 | csc(expr) | csc(1) | 1.188395 |
计算直角三角形的斜边长 | hypot(expr1, expr2) | hypot(3, 4) | 5 |
正割 | sec(expr) | sec(0) | 1 |
正弦 | sin(expr) | sin(1) | 0.841471 |
双曲正弦 | sinh(expr) | sinh(1) | 1.175201 |
正切 | tan(expr) | tan(1) | 1.557408 |
双曲正切 | tanh(expr) | tanh(1) | 0.761594 |
2.4. 随机数生成
用途 | 函数 | 示例 | 结果 |
返回均匀分布的0-1之间的随机小数 | rand() random() | rand()*50 | 27.225448 |
返回标准正态分布的随机小数(均值为0,方差为1) | randn() | randn() | -2.425495 |