【Spark】(九)Spark SQL函数(内置函数、自定义函数)

本文详细介绍了Spark SQL中的内置函数,包括聚合、集合、日期时间、数学、混合、字符串和窗口函数,并提供了使用示例。同时,讲解了自定义函数(UDF、UDAF、UDTF)的创建、注册与调用,以及它们在数据处理中的应用,帮助理解Spark SQL函数的全面功能。
摘要由CSDN通过智能技术生成

内置函数(org.apache.spark.sql.funtions.scala)

一、常用内置函数:

在这里插入图片描述
1.聚合函数
approx_count_distinct/countDistinct: 计算某一列或几列不同元素的个数
avg: 平均数, count: 个数;
first: 首个元素, last:最后一个元素;
max/min, mean, sum, sumDistinct
var_pop: 总体方差, var_samp/variance 计算样本方差; stddev_pop, stddev_samp: 标准差
covar_pop, covar_samp 协方差,.corr 相关系数
kurtosis: 峰度; .skewness:偏度

2.集合函数
array_contains: 包含某个元素
array_distinct: 删除重复的元素
array_except 返回一个array 在第一个col 不在第二个col的元素
array_intersect(col1, col2) 交集4
array_max, array_min, array_position(col, value):第一次出现value的位置,从1开始
array_remove(col, element) 删除出现的元素
array_repeat(col, count): 创造一个数组,count为重复的个数
array_sort(col): 对数组进行排序
array_union(col1, col2), 合并操作
array_overlap, 判断是否有重叠
array_zip, 合并,类似于python的zip
reverse: 逆序; shuffle: 打乱; size, slice, sort_array

3.日期/时间函数
日期时间转换
unix_timestamp, from_unixtime, to_date, quarter, day, dayofyear, weekofyear, from_utc_timestamp, to_utc_timestamp
从日期时间中提取字段
year, month, dayofmonth, hour, minute, second
日期/时间计算
datediff, date_add, date_sub, add_months, last_day, next_day, months_between
获取当前时间等
current_date, current_timestamp, trunc, date_format

4.数学函数
abs, acros, asin, atan, atan2, bin, cbrt, ceil, conv, cos, sosh, exp, expm1, factorial, floor, hex, hypot, log, log10, log1p, log2, pmod, pow, rint, round, shiftLeft, shiftRight, shiftRightUnsigned, signum, sin, sinh, sqrt, tan, tanh, toDegrees, toRadians, unhex

5.混合函数
array, bitwiseNOT, callUDF, coalesce, crc32, greatest, if, inputFileName, isNaN, isnotnull, isnull, least, lit, md5, monotonicallyIncreasingId, nanvl, negate, not, rand, randn, sha, sha1, sparkPartitionId, struct, when

6.字符串函数
字符串分割,大小写转化,删除首尾空白, 正则表达式匹配
ltrim, rtrim, trim
ascii, base64, unbase64, decode, encode, format_string
repeat, reverse
instr(str, substr): 第一次出现的位置; locate(substr, str, pos=1)
字符拼接:concat, concat_ws
分割,子串: split, substring, substring_index
isnan, isnull, nanvl(col1, col2): 返回col1, 如果col1不为nan, 否则返回col2
lower, upper

7.窗口函数
cumeDist, denseRank, lag, lead, ntile, percentRank, rank, rowNumber
作用:分组,对一个组执行函数,这里面最常用的函数是rowNumber,我们可以用它来分组取topN

二、内置函数的使用

案例一:

object InnerFunctionDemo {
   
  def main(args: Array[String]): Unit = {
   
    val spark = SparkSession.builder().appName("InnerFunctionDemo").master("local[*]").getOrCreate()

    import spark.implicits._
    val sc = spark.sparkContext

    //模拟用户访问日志信息
    val accessLog = Array(
      "2016-12-27,001",
      "2016-12-27,001",
      "2016-12-27,002",
      "2016-12-28,003",
      "2016-12-28,004",
      "2016-12-28,002",
      "2016-12-28,002",
      "2016-12-28,001"
    )

    //定义DataFrame的结构
    val schema = StructType(Array(
      StructField("day", StringType),
      StructField("userId", IntegerType, true)
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值