SparkSQL常⽤函数函数分类及其简介
Spark SQL函数
⼀、概述
1、来源:
本⽂总结⾃spark 2.3.1 API⽂档 org.apache.spark.sql:object functions;
2、使⽤:
org.apache.spark.sql.functions中提供了约两百多个函数,⼤部分函数与Hive中类似,除UDF函数,均可在SparkSQL中直接使⽤;如果想要⽤于Dataframe 和 Dataset,可导⼊函数:
import org.apache.spark.sql.functions._
其中,⼤部分⽀持Column的函数也⽀持String类型的列名,这些函数的返回类型基本都是Column。
3、函数分类:
聚合函数
集合函数
时间函数
数学函数
混杂misc函数
其他⾮聚合函数
排序函数
字符串函数
UDF函数
窗⼝函数
⼆、函数:
1、聚合函数
函数作⽤
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
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
函数作⽤
2、集合函数
函数作⽤
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对象字符串。
json_tuple(column,fields)获取json中指定字段值。
map_keys返回map的键组成的array
map_values返回map的值组成的array
size array 或 map 的长度
sort_array(e: Column, asc:
Boolean)
将array中元素排序(⾃然排序),默认asc。
3、时间函数
函数作⽤
add_months(startDate: Column, numMonths: Int)指定⽇期添加n⽉
date_add(start: Column, days: Int)指定⽇期之后n天: select date_add(‘2018-01-01’,3) date_sub(start: Column, days: Int)指定⽇期之前n天
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)提取季度
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)划分到窗⼝
函数作⽤
4、数学函数
函数作⽤
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向上舍⼊
ceil向上舍⼊
floor向下舍⼊
cbrt Computes the cube-root of the given value.
conv(num:Column, fromBase: Int,
toBase: Int)
转换数值(字符串)的进制
log(base: Double, a: Column)logbase(a)log_{base}(a)logbase(a)
log(a: Column)loge(a)log_e(a)loge(a)
log10(a: Column)log10(a)log_{10}(a)log10(a)
log2(a: Column)log2(a)log_{2}(a)log2(a)
log1p(a: Column)loge(a+1)log_{e}(a+1)loge(a+1)
pmod(dividend: Column, divisor:
Column)
Returns the positive value of dividend mod divisor. pow(l: Double, r: Column)rlr^lrl 注意r是列
pow(l: Column, r: Double)rlr^lrl 注意l是列
pow(l: Column, r: Column)rlr^lrl 注意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)逆转⼗六进制
函数作⽤
5、混杂misc函数
函数作⽤
crc32(e: Column)计算CRC32,返回bigint
hash(cols: Column*)计算 hash code,返回int
md5(e: Column)计算MD5摘要,返回32位,16进制字符串
sha1(e: Column)计算SHA-1摘要,返回40位,16进制字符串
sha2(e: Column, numBits: Int)计算SHA-1摘要,返回numBits位,16进制字符串。numBits⽀持224, 256, 384, or 512.
6、⾮聚合函数
函数作⽤
abs(e: Column)绝对值
array(cols: Column*)多列合并为array,cols必须为同类型
map(cols: Column*)将多列组织为map,输⼊列必须为(key,value)形式,各列的key/value分别为同⼀类型。bitwiseNOT(e: Column)Computes bitwise NOT.
broadcast[T](df: Dataset[T]): Dataset[T]将df变量⼴播,⽤于实现broadcast join。如left.join(broadcast(right), “joinKey”) coalesce(e: Column*)返回第⼀个⾮空值
col(colName: String)返回colName对应的Column
column(colName: String)col函数的别名
expr(expr: String)解析expr表达式,将返回值存于Column,并返回这个Column。
greatest(exprs: Column*)返回多列中的最⼤值,跳过Null
least(exprs: Column*)返回多列中的最⼩值,跳过Null
input_file_name()返回当前任务的⽂件名 ??
isnan(e: Column)检查是否NaN(⾮数值)
isnull(e: Column)检查是否为Null
lit(literal: Any)将字⾯量(literal)创建⼀个Column
typedLit[T](literal: T)(implicit arg0:
将字⾯量(literal)创建⼀个Column,literal⽀持 scala : List, Seq and Map. monotonically_increasing_id()返回单调递增唯⼀ID,但不同分区的ID不连续。ID为64位整型。
nanvl(col1: Column, col2: Column)col1为NaN则返回col2
negate(e: Column)负数,同df.select( -df(“amount”) )
not(e: Column)取反,同df.filter( !df(“isActive”) )
rand()随机数[0.0, 1.0]
rand(seed: Long)随机数[0.0, 1.0],使⽤seed种⼦
randn()随机数,从正态分布取
randn(seed: Long)同上
spark_partition_id()返回partition ID
struct(cols: Column*)多列组合成新的struct column ??
when(condition: Column, value: Any)当condition为true返回value,如people.select(when(people(“gender”) === “male”,
0).when(people(“gender”) === “female”, 1).otherwise(2)) 如果没有otherwise且condition全部没命中,则返回null.
函数作⽤
7、排序函数
函数作⽤
asc(columnName: String)正序
asc_nulls_first(columnName: String)正序,null排最前
asc_nulls_last(columnName: String)正序,null排最后
desc(columnName: String)逆序 e.g:df.sort(asc(“dept”), desc(“age”)) desc_nulls_first(columnName: String)正序,null排最前
desc_nulls_last(columnName: String)正序,null排最后
8、字符串函数

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。