pyspark.sql.functions模块:内置函数集合

前言

API的spark版本为v2.2.0。参考链接pyspark.sql.functions官方文档

详解了部分常用的API及使用方法。

正文

三角函数及数学函数

API作用备注
abs绝对值-
acosacos-
asinasin-
atanatan-
atan2两个列的atan2-
bitwiseNOT按位取反:-(n+1)-
broundHALF_EVEN,如果前一位是偶数,五舍六入,否则四舍五入-
cbrt立方根-
ceil取不超过x的最大整数-
coscos-
cosh双曲余弦-
conv进制转换-
degrees弧度转角度-
expexp-
expm1先求指数再减1-
factorial阶乘-
floor向下取整-
loglog-
log10log10-
log1p先求对数再加1-
log2log2-
pow求指数,第一列为底数,第二列为指数-
radians角度转弧度-
round(col,scale)HALF_UP,同传统意义四舍五入 scale >= 0四舍五入,scale<0取整数部分-
rand[0,1]之间的iid随机数-
randn标准正态分布采样-
rint返回最接近的整数并转化为浮点数,0.5的话向绝对值大的方向转换-
signum符号函数-
sinsin-
sinhsinh-
sqrt平方根-
tantan-
tanhtanh-

agg系列

API作用备注
avgdf.groupBy.agg或df.agg-
collect_list与agg联合使用,将分组中的列作为list返回-
collect_set与agg联合使用,将分组中的列作为set返回-
corr与agg联合使用,求皮尔逊相关系数-
count每组元素个数-
countDistinct每组distinct元素个数-
covar_pop两列总体协方差-
covar_samp两列样本协方差-
first分组第一个值-
grouping-
grouping_id-
kurtosis列的峰度-
lastdf.groupBy(‘name’).agg(F.first(‘score’)).show()-
max最大值-
mean均值-
min最小值-
skewness偏度-
stddev样本标准偏差,同stddev_samp-
stddev_samp样本标准偏差,同stddev-
stddev_pop总体标准偏差-
sum与agg联合使用,求和-
sumDistinct先distinct,再求和-
var_pop总体方差-
var_samp样本方差-
variance样本方差,同var_samp-

列编解码

API作用备注
ascii计算string列的ascii数值-
bin二进制-
hex十六进制-
base64-
unbase64-
crc32列的crc32-
md5列的md5-
sha1字符串列元素的sha1-
sha2sha2加密,需指定位数-

时间相关

API作用备注
date_add从指定天累加天数-
date_sub从指定天减少天数-
add_months从指定月份累加月份-
current_date返回当前date作为一列-
current_timestamp返回当前time作为一列-
date_format输出时间格式-
datediff两个日期列相隔天数-
dayofmonth一个月的第几天-
dayofyear一年的第几天-
year-
weekofyear一年的第几个星期-
month月份-
hour-
minute-
second-
last_day一个月最后一天-
months_between两个时间的月份差-
from_unixtime将以秒为时间的列转换为格式化字符串(yyyy-MM-dd HH:mm:ss)-
from_utc_timestamp带时区时间转换-
next_day下一周的今天的日期,相当于加7-
quarter日期处于哪个季度(1,2,3,4)-
trunc返回年或月的第一天-
unix_timestamp转为以秒为单位的时间戳(unix)-
window时间窗口-

Window function

这部分请参考我的博文:《PySpark和SQL中的Window function

API作用备注
cume_distcume_dist-
dense_rank排序序号跳跃[(1,1),(1,1),(2,3)]-
rank排序序号不跳跃[(1,1),(1,1),(2,2)]-
lag-
lead-
ntile-
percent_rank-
row_number-

字符串处理

API作用备注
initcap句子每个单词首字母大写-
instr子字符串在母字符串中的位置-
length字符串长度-
locate字符串出现的位置-
lower字符串全部转小写-
upper字符串全部转大写-
lpad指定子字符串左填充母字符串-
rpad和lpad对应-
ltrim删除str左边空白-
rtrim删除str右边空白-
trim删除str两侧空白-
regexp_extractre匹配返回匹配的元素,否则为空字符串-
regexp_replacere匹配返回最后的参数,否则为原字符串-
repeat重复指定字符串n次-
reverse(Collection function)反转字符串或array-
soundexSoundEx返回由四个字符组成的代码以评估两个字符串的相似性。-
split分隔符可以是子字符串或者list,如果是list,每个元素都是分隔符,如[ABC]-
substring(str, pos, len)字符串截取,pos从1开始-
substring_index(str, delim, count)先用delim对str进行分割,count可以理解为list中的slice,选取delim分割后的str中的子串-
translate字符串替换,后两个参数对应替换-

多个列操作(横向操作)

API作用备注
coalesce取非null的列,如果所有列均非null,取第一个列的值-
nanvl取非Nan的列,如果所有列均非Nan,取第一个列的值-
concat将多个列连接起来,适合字符串二进制和数组.注意和array区别-
concat_ws使用指定分隔符将多个列连接起来;不可以用在groupby.agg中,会返回空值(2022.07.26)例子
hash列的每个元素的组合hash-
hypot两个列每个元素的欧氏距离-
greatest指定几列对比的最大值-
least比较多个列选取最小值-

Collection function

API作用备注
array_contains如果列元素是array,判断array是否有某个元素-
size计算array或map中的长度-
sort_arrayarray排序-

无分类常用API

API作用备注
isnan是否为nan-
isnull是否为空值null-
spark_partition_id分区编号作为一列-
udfudf请参考《PySpark系列:pyspark udf的使用
whenF.when(df.score>=80,100).when(df.score<60,0).otherwise(50)-
col选取df列名作为参数,返回新的列-
column同col-

无分类

API作用备注
approx_count_distinct去重后的值的大约个数(速度快)-
array组合多个列作为array-
asc官方没例子,Column.asc可以代替-
desc官方没例子,Column.desc可以代替-
broadcast将DF标记为足够小,以便在broadcast joins中使用-
create_map两列之前的字典映射,前者为key,后者为value-
decode解码为指定字符集-
encode编码为指定字符集-
explode将列的list元素变为列-
posexplode类似explode,多一个位置列-
expr执行表达式字符串并返回column-
format_number保留几位小数-
format_string字符串格式化(%d,%s,%f)-
from_jsonfrom_json-
functools一个模块,新版已经删除-
get_json_object从json字符串提取列-
input_file_name为当前Spark任务的文件名创建一个字符串列。-
json_tuple根据key解析json字符串并返回相应列-
levenshtein两个列字符串逻辑距离-
lit通过字面值(literal value)创建column-
monotonically_increasing_id添加单调递增的64-bit整数作为column-
shiftLeft位运算-左移-
shiftRight位运算-右移-
shiftRightUnsigned无符号位运算右移-
struct组合多列作为一个struct-
to_date等价于pyspark.sql.Column.cast(“date”),将列元素转换为pyspark.sql.types.DateType类型-
to_json将包含StructType,ArrayType或MapType的column转化为json-
to_timestamp将Column转换为pyspark.sql.types.TimestampType 类型-
to_utc_timestamp将Column转换为带utc的时间戳类型-

代码例子

concat_ws

d1 = {'first_name':["LeBron","Stephen","Kevin"], 'last_name':["James","Curry","Durant"]}
df1 = spark.createDataFrame(pd.DataFrame(d1))
df1.show()
"""
输出:
+----------+---------+
|first_name|last_name|
+----------+---------+
|    LeBron|    James|
|   Stephen|    Curry|
|     Kevin|   Durant|
+----------+---------+
"""

df2 = df1.withColumn("full_name", F.concat_ws("-", F.col("first_name"), F.col("last_name")))
df2.show()
"""
输出:
+----------+---------+-------------+
|first_name|last_name|    full_name|
+----------+---------+-------------+
|    LeBron|    James| LeBron-James|
|   Stephen|    Curry|Stephen-Curry|
|     Kevin|   Durant| Kevin-Durant|
+----------+---------+-------------+
"""
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值