SparkSql 之 函数

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):逆转十六进制

 

SparkSql 之 函数

上一篇:Opencv4文档阅读


下一篇:JDBC