我是
靠谱客的博主
糊涂秋天,最近开发中收集的这篇文章主要介绍
pyspark.sql.functions模块:内置函数集合前言正文代码例子,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
目录
- 前言
- 正文
- 三角函数及数学函数
- agg系列
- 列编解码
- 时间相关
- Window function
- 字符串处理
- 多个列操作(横向操作)
- Collection function
- 无分类常用API
- 无分类
- 代码例子
-
前言
API的spark版本为v2.2.0。参考链接pyspark.sql.functions官方文档
详解了部分常用的API及使用方法。
正文
三角函数及数学函数
API | 作用 | 备注 |
---|
abs | 绝对值 | - |
acos | acos | - |
asin | asin | - |
atan | atan | - |
atan2 | 两个列的atan2 | - |
bitwiseNOT | 按位取反:-(n+1) | - |
bround | HALF_EVEN,如果前一位是偶数,五舍六入,否则四舍五入 | - |
cbrt | 立方根 | - |
ceil | 取不超过x的最大整数 | - |
cos | cos | - |
cosh | 双曲余弦 | - |
conv | 进制转换 | - |
degrees | 弧度转角度 | - |
exp | exp | - |
expm1 | 先求指数再减1 | - |
factorial | 阶乘 | - |
floor | 向下取整 | - |
log | log | - |
log10 | log10 | - |
log1p | 先求对数再加1 | - |
log2 | log2 | - |
pow | 求指数,第一列为底数,第二列为指数 | - |
radians | 角度转弧度 | - |
round(col,scale) | HALF_UP,同传统意义四舍五入 scale >= 0四舍五入,scale<0取整数部分 | - |
rand | [0,1]之间的iid随机数 | - |
randn | 标准正态分布采样 | - |
rint | 返回最接近的整数并转化为浮点数,0.5的话向绝对值大的方向转换 | - |
signum | 符号函数 | - |
sin | sin | - |
sinh | sinh | - |
sqrt | 平方根 | - |
tan | tan | - |
tanh | tanh | - |
agg系列
API | 作用 | 备注 |
---|
avg | df.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 | 列的峰度 | - |
last | df.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 | - |
sha2 | sha2加密,需指定位数 | - |
时间相关
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_dist | cume_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_extract | re匹配返回匹配的元素,否则为空字符串 | - |
regexp_replace | re匹配返回最后的参数,否则为原字符串 | - |
repeat | 重复指定字符串n次 | - |
reverse | (Collection function)反转字符串或array | - |
soundex | SoundEx返回由四个字符组成的代码以评估两个字符串的相似性。 | - |
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_array | array排序 | - |
无分类常用API
API | 作用 | 备注 |
---|
isnan | 是否为nan | - |
isnull | 是否为空值null | - |
spark_partition_id | 分区编号作为一列 | - |
udf | udf | 请参考《PySpark系列:pyspark udf的使用》 |
when | F.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_json | from_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|
+----------+---------+-------------+
"""
最后
以上就是糊涂秋天为你收集整理的pyspark.sql.functions模块:内置函数集合前言正文代码例子的全部内容,希望文章能够帮你解决pyspark.sql.functions模块:内置函数集合前言正文代码例子所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复