目录
- 前言
- 正文
- 三角函数及数学函数
- 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内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复