asc(columnName: String):正序
asc_nulls_first(columnName: String):正序,null排最前
asc_nulls_last(columnName: String):正序,null排最后
e.g.
df.sort(asc("dept"),desc("age"))
对应有desc函数
desc,desc_nulls_first,desc_nulls_last
8.字符串函数
ascii(e: Column): 计算第一个字符的ascii码
base64(e: Column): base64转码
unbase64(e: Column): base64解码
concat(exprs: Column*):连接多列字符串
concat_ws(sep: String, exprs: Column*):使用sep作为分隔符连接多列字符串
decode(value: Column,charset: String): 解码
encode(value: Column,charset: String): 转码,charset支持 'US-ASCII','ISO-8859-1','UTF-8','UTF-16BE','UTF-16LE','UTF-16'。
format_number(x: Column, d: Int):格式化'#,###,###.##'形式的字符串
format_string(format: String, arguments: Column*): 将arguments按format格式化,格式为printf-style。
initcap(e: Column): 单词首字母大写
lower(e: Column): 转小写
upper(e: Column): 转大写
instr(str: Column, substring: String): substring在str中第一次出现的位置
length(e: Column): 字符串长度
levenshtein(l: Column, r: Column): 计算两个字符串之间的编辑距离(Levenshtein distance)
locate(substr: String, str: Column): substring在str中第一次出现的位置,位置编号从1开始,0表示未找到。
locate(substr: String, str: Column, pos: Int): 同上,但从pos位置后查找。
lpad(str: Column, len: Int, pad: String):字符串左填充。用pad字符填充str的字符串至len长度。有对应的rpad,右填充。
ltrim(e: Column):剪掉左边的空格、空白字符,对应有rtrim.
ltrim(e: Column, trimString: String):剪掉左边的指定字符,对应有rtrim.
trim(e: Column, trimString: String):剪掉左右两边的指定字符
trim(e: Column):剪掉左右两边的空格、空白字符
regexp_extract(e: Column, exp: String, groupIdx: Int): 正则提取匹配的组
regexp_replace(e: Column, pattern: Column, replacement: Column): 正则替换匹配的部分,这里参数为列。
regexp_replace(e: Column, pattern: String, replacement: String): 正则替换匹配的部分
repeat(str: Column, n: Int):将str重复n次返回
reverse(str: Column): 将str反转
soundex(e: Column): 计算桑迪克斯代码(soundex code)PS:用于按英语发音来索引姓名,发音相同但拼写不同的单词,会映射成同一个码。
split(str: Column, pattern: String): 用pattern分割str
substring(str: Column, pos: Int, len: Int): 在str上截取从pos位置开始长度为len的子字符串。
substring_index(str: Column, delim: String, count: Int):Returns the substring from string str before count occurrences of the delimiter delim.If count is positive, everything the leftof the final delimiter(counting fromleft)is returned.If count is negative, every to the rightof the final delimiter(counting from the right)is returned. substring_index performs a case-sensitive matchwhen searching for delim.
translate(src: Column, matchingString: String, replaceString: String):把src中的matchingString全换成replaceString。
9.UDF函数
user-defined function.
callUDF(udfName: String, cols: Column*): 调用UDF
import org.apache.spark.sql._
val df = Seq(("id1",1),("id2",4),("id3",5)).toDF("id","value")
val spark = df.sparkSession
spark.udf.register("simpleUDF",(v: Int)=> v * v)
df.select($"id", callUDF("simpleUDF", $"value"))
udf: 定义UDF
10.窗口函数
cume_dist(): cumulative distribution ofvalueswithin a window partition
currentRow(): returns the special frame boundary that represents the currentrowin the window partition.
rank():排名,返回数据项在分组中的排名,排名相等会在名次中留下空位 1,2,2,4。
dense_rank(): 排名,返回数据项在分组中的排名,排名相等会在名次中不会留下空位 1,2,2,3。
row_number():行号,为每条记录返回一个数字 1,2,3,4
percent_rank():returns the relative rank (i.e. percentile)ofrowswithin a window partition.
lag(e: Column,offset: Int, defaultValue: Any): offsetrows before the currentrow
lead(e: Column,offset: Int, defaultValue: Any): returns the value that isoffsetrowsafter the currentrow
ntile(n: Int): returns the ntile group id (from1to n inclusive)in an ordered window partition.
unboundedFollowing():returns the special frame boundary that represents the lastrowin the window partition.