当前位置 博文首页 > 文章内容

    SparkSql 之 函数

    作者: 栏目:未分类 时间:2020-10-27 15:01:02

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



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