org.apache.spark.sql.functions是一个Object,提供了约两百多个函数。
大部分函数与Hive的差不多。
除UDF函数,均可在spark-sql中直接使用。
经过import org.apache.spark.sql.functions._ ,也可以用于Dataframe,Dataset。
version
2.3.0
大部分支持Column的函数也支持String类型的列名。这些函数的返回类型基本都是Column。
函数很多,都在下面了。
一、聚合函数
approx_count_distinct
count_distinct近似值
avg
平均值
collect_list
聚合指定字段的值到list
collect_set
聚合指定字段的值到set
corr
计算两列的Pearson相关系数
count
计数
countDistinct
去重计数 SQL中用法
select count(distinct class)
covar_pop
总体协方差(population covariance)
covar_samp
样本协方差(sample covariance)
first
分组第一个元素
last
分组最后一个元素
grouping
grouping_id
kurtosis
计算峰态(kurtosis)值
skewness
计算偏度(skewness)
max
最大值
min
最小值
mean
平均值
stddev
即stddev_samp
stddev_samp
样本标准偏差(sample standard deviation)
stddev_pop
总体标准偏差(population standard deviation)
sum
求和
sumDistinct
非重复值求和 SQL中用法
select sum(distinct class)
var_pop
总体方差(population variance)
var_samp
样本无偏方差(unbiased variance)
variance
即var_samp
二、集合函数
array_contains(column,value)
检查array类型字段是否包含指定元素
explode
展开array或map为多行
explode_outer
同explode,但当array或map为空或null时,会展开为null。
posexplode
同explode,带位置索引。
posexplode_outer
同explode_outer,带位置索引。
from_json
解析JSON字符串为StructType or ArrayType,有多种参数形式,详见文档。
to_json
转为json字符串,支持StructType, ArrayType of StructTypes, a MapType or ArrayType of MapTypes。
get_json_object(column,path)
获取指定json路径的json对象字符串。
select get_json_object(‘{"a"1,"b":2}‘,‘$.a‘);
[JSON Path介绍](http://blog.csdn.net/koflance/article/details/63262484)
json_tuple(column,fields)
获取json中指定字段值。select json_tuple(‘{"a":1,"b":2}‘,‘a‘,‘b‘);
map_keys
返回map的键组成的array
map_values
返回map的值组成的array
size
array or map的长度
sort_array(e: Column, asc: Boolean)
将array中元素排序(自然排序),默认asc。
三、时间函数
add_months(startDate: Column, numMonths: Int)
指定日期添加n月
date_add(start: Column, days: Int)
指定日期之后n天 e.g. select date_add(‘2018-01-01‘,3)
date_sub(start: Column, days: Int)
指定日期之前n天
datediff(end: Column, start: Column)
两日期间隔天数
current_date()
当前日期
current_timestamp()
当前时间戳,TimestampType类型
date_format(dateExpr: Column, format: String)
日期格式化
dayofmonth(e: Column)
日期在一月中的天数,支持 date/timestamp/string
dayofyear(e: Column)
日期在一年中的天数, 支持 date/timestamp/string
weekofyear(e: Column)
日期在一年中的周数, 支持 date/timestamp/string
from_unixtime(ut: Column, f: String)
时间戳转字符串格式
from_utc_timestamp(ts: Column, tz: String)
时间戳转指定时区时间戳
to_utc_timestamp(ts: Column, tz: String)
指定时区时间戳转UTF时间戳
hour(e: Column)
提取小时值
minute(e: Column)
提取分钟值
month(e: Column)
提取月份值
quarter(e: Column)
提取季度
second(e: Column)
提取秒
year(e: Column):提取年
last_day(e: Column)
指定日期的月末日期
months_between(date1: Column, date2: Column)
计算两日期差几个月
next_day(date: Column, dayOfWeek: String)
计算指定日期之后的下一个周一、二...,dayOfWeek区分大小写,只接受 "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"。
to_date(e: Column)
字段类型转为DateType
trunc(date: Column, format: String)
日期截断
unix_timestamp(s: Column, p: String)
指定格式的时间字符串转时间戳
unix_timestamp(s: Column)
同上,默认格式为 yyyy-MM-dd HH:mm:ss
unix_timestamp():当前时间戳(秒),底层实现为unix_timestamp(current_timestamp(), yyyy-MM-dd HH:mm:ss)
window(timeColumn: Column, windowDuration: String, slideDuration: String, startTime: String)
时间窗口函数,将指定时间(TimestampType)划分到窗口
四、数学函数
cos,sin,tan
计算角度的余弦,正弦。。。
sinh,tanh,cosh
计算双曲正弦,正切,。。
acos,asin,atan,atan2
计算余弦/正弦值对应的角度
bin
将long类型转为对应二进制数值的字符串For example, bin("12") returns "1100".
bround
舍入,使用Decimal的HALF_EVEN模式,v>0.5向上舍入,v< 0.5向下舍入,v0.5向最近的偶数舍入。
round(e: Column, scale: Int)
HALF_UP模式舍入到scale为小数点。v>=0.5向上舍入,v< 0.5向下舍入,即四舍五入。
ceil
向上舍入
floor
向下舍入
cbrt
Computes the cube-root of the given value.
conv(num:Column, fromBase: Int, toBase: Int)
转换数值(字符串)的进制
log(base: Double, a: Column):$log_{base}(a)$
log(a: Column):$log_e(a)$
log10(a: Column):$log_{10}(a)$
log2(a: Column):$log_{2}(a)$
log1p(a: Column):$log_{e}(a+1)$
pmod(dividend: Column, divisor: Column):Returns the positive value of dividend mod divisor.
pow(l: Double, r: Column):$r^l$ 注意r是列
pow(l: Column, r: Double):$r^l$ 注意l是列
pow(l: Column, r: Column):$r^l$ 注意r,l都是列
radians(e: Column):角度转弧度
rint(e: Column):Returns the double value that is closest in value to the argument and is equal to a mathematical integer.
shiftLeft(e: Column, numBits: Int):向左位移
shiftRight(e: Column, numBits: Int):向右位移
shiftRightUnsigned(e: Column, numBits: Int):向右位移(无符号位)
signum(e: Column):返回数值正负符号
sqrt(e: Column):平方根
hex(column: Column):转十六进制
unhex(column: Column):逆转十六进制