PySpark3:pyspark.sql.functions常见的60个函数
目录
一、常见的60个函数
1、col
2、lit
3、sum
4、avg/mean
5、count
6、max
7、min
8、concat
9、substring
10、lower
11、upper
12、trim
13、ltrim
14、rtrim
15、split
16、explode
17、collect_list
18、collect_set
19、asc
20、desc
21、when
22、to_date
23、current_date
24、datediff
25、date_add
26、date_sub
27、year
28、month
29、day
30、cast
31、round
32、ceil
34、coalesce
35、isnull
36、isnotnull
37、like
38、rlike
39、size
40、array_contains
41、element_at
42、array_join
43、struct
44、expr
45、create_map
46、map_keys
47、map_values
48、translate
49、regexp_replace
50、flatten
51、sort_array
52、to_json
53、from_json
54、udf
55、pandas_udf
56、row_number
57、rank
58、dense_rank
59、stddev
60、var_samp
二、总结
一、常见的60个函数
首先创建一个用于测试的DataFrame:
from pyspark.sql import SparkSession
from pyspark.sql import functions as F# 初始化 SparkSession
spark = SparkSession.builder.appName("test").getOrCreate()# 创建一个 DataFrame
data = [("James", "Smith", "USA", "CA", "1999/04/15", 60.86, "football|swimming|playing the guitar", None),("Michael", "Rose", "USA", "NY", "1995/03/01", 80.0, "reading books|gardening|collecting stamps", "phone number:123456"),("Robert", "Williams", None, None, "1997/10/31", 91.0, "photography", " outgoing "),("Maria", "Jones", "USA", "FL", "1991/01/25", 59.5, None, " a diligent student. ")]
columns = ["firstname", "lastname", "country", "state", "birthday", "score", "hobbies", "remarks"]
df = spark.createDataFrame(data, schema=columns)df.show()'''
+---------+--------+-------+-----+----------+-----+--------------------+--------------------+
|firstname|lastname|country|state| birthday|score| hobbies| remarks|
+---------+--------+-------+-----+----------+-----+--------------------+--------------------+
| James| Smith| USA| CA|1999/04/15|60.86|football|swimming...| NULL|
| Michael| Rose| USA| NY|1995/03/01| 80.0|reading books|gar...| phone number:123456|
| Robert|Williams| NULL| NULL|1997/10/31| 91.0| photography| outgoing |
| Maria| Jones| USA| FL|1991/01/25| 59.5| NULL| a diligent stude...|
+---------+--------+-------+-----+----------+-----+--------------------+--------------------+
'''
1、col
用于通过列名获取列对象,在选择列、进行列相关操作时经常使用。
df.select(F.col("firstname"), F.col("lastname")).show()'''
+---------+--------+
|firstname|lastname|
+---------+--------+
| James| Smith|
| Michael| Rose|
| Robert|Williams|
| Maria| Jones|
+---------+--------+
'''
有的时候PySpark在内部会将字符串自动转换为Column对象,例如select方法可以接受字符串列表,并且PySpark会将这些字符串解释为DataFrame中的列名,所以可以省略col:
df.select("firstname", "lastname")
但在执行更复杂的操作,如对列进行函数调用或组合列,那么必须使用col:
df.select(F.col("score")+0.5)
2、lit
lit函数用于创建一个包含常量值的Column对象,可以向DataFrame添加常量值或作为条件表达式的一部分。
df.select(F.col("firstname"), F.lit("Member").alias("type"), F.lit(0).alias("number")).show()'''
+---------+------+------+
|firstname| type|number|
+---------+------+------+
| James|Member| 0|
| Michael|Member| 0|
| Robert|Member| 0|
| Maria|Member| 0|
+---------+------+------+
'''
3、sum
对指定列进行求和操作,常用于数据分析中计算数值列的总和。
df.select(F.sum("score").alias("score_sum")).show()'''
+---------+
|score_sum|
+---------+
| 291.36|
+---------+
'''
4、avg/mean
计算指定列的平均值。
df.select(F.avg("score").alias("score_avg"),
F.mean("score").alias("score_mean")).show()
'''
+---------+----------+
|score_avg|score_mean|
+---------+----------+
| 72.84| 72.84|
+---------+----------+
'''
5、count
统计行数。
df.select(F.count("*")).show()
'''
+--------+
|count(1)|
+--------+
| 4|
+--------+
'''
6、max
获取指定列中的最大值。
df.select(F.max("score").alias("score_max")).show()
'''
+---------+
|score_max|
+---------+
| 91.0|
+---------+
'''
7、min
获取指定列中的最小值。
df.select(F.min("score").alias("score_min")).show()
'''
+---------+
|score_min|
+---------+
| 59.5|
+---------+
'''
8、concat
用于将多个字符串列或者字符串字面量拼接成一个新的字符串。
df.select((F.concat(F.col("firstname"), F.lit("·"), F.col("lastname"))).alias("fullname")).show()'''
+---------------+
| fullname|
+---------------+
| James·Smith|
| Michael·Rose|
|Robert·Williams|
| Maria·Jones|
+---------------+
'''
9、substring
从字符串列中截取指定位置和长度的子字符串。
df.select(F.substring("birthday", 1, 4).alias("birthyear")).show()'''
+---------+
|birthyear|
+---------+
| 1999|
| 1995|
| 1997|
| 1991|
+---------+
'''
10、lower
将字符串列中的所有字符转换为小写,常用于文本标准化等场景。
df.select(F.lower("country")).show()'''
+--------------+
|lower(country)|
+--------------+
| usa|
| usa|
| NULL|
| usa|
+--------------+
'''
11、upper
和lower函数相反,upper将字符串列中的所有字符转换为大写。
df.select(F.upper("firstname")).show()'''
+----------------+
|upper(firstname)|
+----------------+
| JAMES|
| MICHAEL|
| ROBERT|
| MARIA|
+----------------+
'''
12、trim
去除字符串列两端的空白字符(空格、制表符等),清理输入文本时常用。
df.select(F.trim("remarks")).show()'''
+-------------------+
| trim(remarks)|
+-------------------+
| NULL|
|phone number:123456|
| outgoing|
|a diligent student.|
+-------------------+
'''
13、ltrim
只去除字符串列左边的空白字符。
df.select(F.ltrim("remarks")).show()'''
+--------------------+
| ltrim(remarks)|
+--------------------+
| NULL|
| phone number:123456|
| outgoing |
|a diligent studen...|
+--------------------+
'''
14、rtrim
只去除字符串列左边的空白字符。
df.select(F.rtrim("remarks")).show()'''
+--------------------+
| rtrim(remarks)|
+--------------------+
| NULL|
| phone number:123456|
| outgoing|
| a diligent student.|
+--------------------+
'''
15、split
按照指定分隔符将字符串列分割成数组。
df = df.withColumn("hobby_list",F.split("hobbies", "\|"))
df.select("hobby_list").show()'''
+--------------------+
| hobby_list|
+--------------------+
|[football, swimmi...|
|[reading books, g...|
| [photography]|
| NULL|
+--------------------+
'''
16、explode
将包含数组的列展开,每行对应数组中的一个元素,常用于处理一对多的数据关系。
df.select("firstname", F.explode("hobby_list")).show()'''
+---------+------------------+
|firstname| col|
+---------+------------------+
| James| football|
| James| swimming|
| James|playing the guitar|
| Michael| reading books|
| Michael| gardening|
| Michael| collecting stamps|
| Robert| photography|
+---------+------------------+
'''
17、collect_list
将指定列的值收集成一个列表(数组),常用于分组后把某列的值聚合起来。
df.groupBy("country").agg(F.collect_list("firstname")).show()'''
+-------+-----------------------+
|country|collect_list(firstname)|
+-------+-----------------------+
| USA| [James, Michael, ...|
| NULL| [Robert]|
+-------+-----------------------+
'''
18、collect_set
类似collect_list,不过它会去除重复元素,将指定列的值收集成一个去重后的集合(数组)。
df.groupBy("country").agg(F.collect_set("firstname")).show()'''
+-------+----------------------+
|country|collect_set(firstname)|
+-------+----------------------+
| USA| [Maria, Michael, ...|
| NULL| [Robert]|
+-------+----------------------+
'''
19、asc
指定升序排序,但其实升序是默认的,也可以不指定。
df.select("firstname","score").orderBy(F.asc("score")).show()'''
+---------+-----+
|firstname|score|
+---------+-----+
| Maria| 59.5|
| James|60.86|
| Michael| 80.0|
| Robert| 91.0|
+---------+-----+
'''
20、desc
指定降序排序。
df.select("firstname","score").orderBy(F.desc("score")).show()'''
+---------+-----+
|firstname|score|
+---------+-----+
| Robert| 91.0|
| Michael| 80.0|
| James|60.86|
| Maria| 59.5|
+---------+-----+
'''
21、when
用于实现类似条件判断的操作,构建条件表达式来生成新列或者更新列值。
类似于SQL中的“case when … then … when … then … else … end”结构。
df.select("score", F.when(F.col("score") >= 90, "Grade A")\
.when(F.col("score") >= 80, "Grade B")\
.when(F.col("score") >= 70, "Grade C")\
.when(F.col("score") >= 60, "Grade D")\
.otherwise("Grade E").alias("grade")).show()'''
+-----+-------+
|score| grade|
+-----+-------+
|60.86|Grade D|
| 80.0|Grade B|
| 91.0|Grade A|
| 59.5|Grade E|
+-----+-------+
'''
22、to_date
将字符串类型的日期数据转换为日期格式,方便后续日期相关运算
df = df.withColumn("birthday", F.to_date("birthday", "yyyy/MM/dd"))
df.select("birthday").show()'''
+----------+
| birthday|
+----------+
|1999-04-15|
|1995-03-01|
|1997-10-31|
|1991-01-25|
+----------+
'''
23、current_date
获取当前的日期。
df.select(F.current_date()).show()'''
+--------------+
|current_date()|
+--------------+
| 2024-11-20|
| 2024-11-20|
| 2024-11-20|
| 2024-11-20|
+--------------+
'''
24、datediff
计算两个日期列之间的天数差值。
df.select(F.datediff(F.current_date(), "birthday")).show()'''
+----------------------------------+
|datediff(current_date(), birthday)|
+----------------------------------+
| 9351|
| 10857|
| 9882|
| 12353|
+----------------------------------+
'''
25、date_add
在指定日期列基础上增加一定天数。
df.select("birthday", F.date_add("birthday", 1)).show()'''
+----------+---------------------+
| birthday|date_add(birthday, 1)|
+----------+---------------------+
|1999-04-15| 1999-04-16|
|1995-03-01| 1995-03-02|
|1997-10-31| 1997-11-01|
|1991-01-25| 1991-01-26|
+----------+---------------------+
'''
26、date_sub
和date_add相反,date_sub是在指定日期列基础上减去一定天数。
df.select("birthday", F.date_sub("birthday", 1)).show()'''
+----------+---------------------+
| birthday|date_sub(birthday, 1)|
+----------+---------------------+
|1999-04-15| 1999-04-14|
|1995-03-01| 1995-02-28|
|1997-10-31| 1997-10-30|
|1991-01-25| 1991-01-24|
+----------+---------------------+
'''
27、year
从日期列中提取年份部分。
df.select(F.year("birthday")).show()'''
+--------------+
|year(birthday)|
+--------------+
| 1999|
| 1995|
| 1997|
| 1991|
+--------------+
'''
28、month
提取日期列中的月份部分。
df.select(F.month("birthday")).show()'''
+---------------+
|month(birthday)|
+---------------+
| 4|
| 3|
| 10|
| 1|
+---------------+
'''
29、day
提取日期列中的日部分。
df.select(F.day("birthday")).show()'''
+-------------+
|day(birthday)|
+-------------+
| 15|
| 1|
| 31|
| 25|
+-------------+
'''
30、cast
用于数据类型转换,比如把时间类型转成字符串类型。
df.select(F.cast('string',F.col("birthday")).alias("birthday_str")).show()'''
+------------+
|birthday_str|
+------------+
| 1999-04-15|
| 1995-03-01|
| 1997-10-31|
| 1991-01-25|
+------------+
'''
或者,也可使用Column对象的绑定方法:
df.select(F.col("birthday").cast("string").alias("birthday_str")).show()
31、round
对数值列进行四舍五入操作,指定保留的小数位数。
df.select(F.round("score", 1), F.round("score", -1)).show()'''
+---------------+----------------+
|round(score, 1)|round(score, -1)|
+---------------+----------------+
| 60.9| 60.0|
| 80.0| 80.0|
| 91.0| 90.0|
| 59.5| 60.0|
+---------------+----------------+
'''
32、ceil
向上取整,对数值列取大于等于它的最小整数。
df.select(F.ceil("score")).show()'''
+-----------+
|CEIL(score)|
+-----------+
| 61|
| 80|
| 91|
| 60|
+-----------+
'''
33、floor
向下取整,对数值列取小于等于它的最小整数。
df.select(F.floor("score")).show()'''
+------------+
|FLOOR(score)|
+------------+
| 60|
| 80|
| 91|
| 59|
+------------+
'''
34、coalesce
从多个列中选择第一个非空值的列作为结果列,常用于处理可能存在空值替换的情况。
df.select(F.coalesce("hobbies", "remarks")).show()'''
+--------------------------+
|coalesce(hobbies, remarks)|
+--------------------------+
| football|swimming...|
| reading books|gar...|
| photography|
| a diligent stude...|
+--------------------------+
'''
也可以使用nvl(只能传入两列)、nvl2(只能传入三列),相比之下,还是coalesce函数(不限制列数)更好用一些。
35、isnull
判断列中的值是否为 null,常配合条件判断使用,比如筛选出某列值为 null 的行。
df.filter(F.isnull("hobbies")).show()'''
+---------+--------+-------+-----+----------+-----+-------+--------------------+
|firstname|lastname|country|state| birthday|score|hobbies| remarks|
+---------+--------+-------+-----+----------+-----+-------+--------------------+
| Maria| Jones| USA| FL|1991/01/25| 59.5| NULL| a diligent stude...|
+---------+--------+-------+-----+----------+-----+-------+--------------------+
'''
36、isnotnull
df.filter(F.isnotnull("hobbies")).show()'''
+---------+--------+-------+-----+----------+-----+--------------------+-------------------+
|firstname|lastname|country|state| birthday|score| hobbies| remarks|
+---------+--------+-------+-----+----------+-----+--------------------+-------------------+
| James| Smith| USA| CA|1999/04/15|60.86|football|swimming...| NULL|
| Michael| Rose| USA| NY|1995/03/01| 80.0|reading books|gar...|phone number:123456|
| Robert|Williams| NULL| NULL|1997/10/31| 91.0| photography| outgoing |
+---------+--------+-------+-----+----------+-----+--------------------+-------------------+
'''
37、like
用于字符串的模糊匹配,类似 SQL 中的 LIKE 操作符。
df.select(F.col("firstname").like("J%"))
'''
+-----------------+
|firstname LIKE J%|
+-----------------+
| true|
| false|
| false|
| false|
+-----------------+
'''df.filter(F.col("firstname").like("J%")).show()
'''
+---------+--------+-------+-----+----------+-----+--------------------+-------+
|firstname|lastname|country|state| birthday|score| hobbies|remarks|
+---------+--------+-------+-----+----------+-----+--------------------+-------+
| James| Smith| USA| CA|1999/04/15|60.86|football|swimming...| NULL|
+---------+--------+-------+-----+----------+-----+--------------------+-------+
'''
38、rlike
使用正则表达式进行字符串匹配,更灵活地进行文本匹配筛选。
df.filter(F.col("remarks").rlike(".*[0-9].*")).show()
'''
+---------+--------+-------+-----+----------+-----+--------------------+-------------------+
|firstname|lastname|country|state| birthday|score| hobbies| remarks|
+---------+--------+-------+-----+----------+-----+--------------------+-------------------+
| Michael| Rose| USA| NY|1995/03/01| 80.0|reading books|gar...|phone number:123456|
+---------+--------+-------+-----+----------+-----+--------------------+-------------------+
'''
39、size
用于获取数组列中元素的个数,若为Null值则返回-1。
df.select("hobby_list",F.size("hobby_list")).show()'''
+--------------------+----------------+
| hobby_list|size(hobby_list)|
+--------------------+----------------+
|[football, swimmi...| 3|
|[reading books, g...| 3|
| [photography]| 1|
| NULL| -1|
+--------------------+----------------+
'''
40、array_contains
判断数组列中是否包含指定元素。
df.filter(F.array_contains("hobby_list", "football")).show()'''
+---------+--------+-------+-----+----------+-----+--------------------+-------+--------------------+
|firstname|lastname|country|state| birthday|score| hobbies|remarks| hobby_list|
+---------+--------+-------+-----+----------+-----+--------------------+-------+--------------------+
| James| Smith| USA| CA|1999-04-15|60.86|football|swimming...| NULL|[football, swimmi...|
+---------+--------+-------+-----+----------+-----+--------------------+-------+--------------------+
'''
41、element_at
从数组列中获取指定位置的元素,比如获取列表中的第2个因元素。若没有第二个元素,则返回Null值。
df.select(F.element_at("hobby_list", 2)).show()'''
+-------------------------+
|element_at(hobby_list, 2)|
+-------------------------+
| swimming|
| gardening|
| NULL|
| NULL|
+-------------------------+
'''
42、array_join
将数组列中的元素用指定分隔符拼接成字符串,用法与split函数相反。
df.select(F.array_join("hobby_list", "|")).show()'''
+-------------------------+
|array_join(hobby_list, |)|
+-------------------------+
| football|swimming...|
| reading books|gar...|
| photography|
| NULL|
+-------------------------+
'''
43、struct
用于创建包含多个字段的结构体列,常用于嵌套数据结构的构建,例如把姓名和出生年月组合成一个结构体列。
df = df.withColumn("person_info", F.struct(F.col("firstname"), F.col("lastname"), F.col("birthday")))
df.select("person_info").show()'''
+--------------------+
| person_info|
+--------------------+
|{James, Smith, 19...|
|{Michael, Rose, 1...|
|{Robert, Williams...|
|{Maria, Jones, 19...|
+--------------------+
'''
44、expr
允许用户以字符串的形式编写 SQL 表达式,并将其应用到 DataFrame 上。
df.select(F.expr("person_info.firstname")).show()'''
+---------+
|firstname|
+---------+
| James|
| Michael|
| Robert|
| Maria|
+---------+
'''
或者,也可使用以下代码,作用相同:
df.selectExpr("person_info.firstname").show()
45、create_map
创建一个键值对形式的映射(字典)列。
df = df.withColumn("person_map", F.create_map(F.col("firstname"), F.col("birthday")))
df.select("person_map").show()'''
+--------------------+
| person_map|
+--------------------+
|{James -> 1999-04...|
|{Michael -> 1995-...|
|{Robert -> 1997-1...|
|{Maria -> 1991-01...|
+--------------------+
'''
46、map_keys
获取映射列中所有的键组成的数组。
df.select(F.map_keys("person_map")).show()'''
+--------------------+
|map_keys(person_map)|
+--------------------+
| [James]|
| [Michael]|
| [Robert]|
| [Maria]|
+--------------------+
'''
47、map_values
获取映射列中所有的键组成的数组。
df.select(F.map_values("person_map")).show()'''
+----------------------+
|map_values(person_map)|
+----------------------+
| [1999-04-15]|
| [1995-03-01]|
| [1997-10-31]|
| [1991-01-25]|
+----------------------+
'''
48、translate
根据给定的字符映射关系来替换字符串中的字符。
df.select(F.translate("remarks", "123456", "#")).show()'''
+-----------------------------+
|translate(remarks, 123456, #)|
+-----------------------------+
| NULL|
| phone number:#|
| outgoing |
| a diligent stude...|
+-----------------------------+
'''
49、regexp_replace
按照指定的正则表达式模式来替换字符串中的内容,例如把一个文本列中所有的数字替换为#符号。
df.select(F.regexp_replace("remarks", "\\d", "#")).show()'''
+---------------------------------+
|regexp_replace(remarks, \d, #, 1)|
+---------------------------------+
| NULL|
| phone number:######|
| outgoing |
| a diligent stude...|
+---------------------------------+
'''
50、flatten
将一个数组(Array)类型的列转换为一个包含所有元素的扁平化列表,常用于处理嵌套结构的数据。
df = df.withColumn("array", F.lit([[1,2], [3,4]]))
df.select(F.flatten("array")).show()'''
+--------------+
|flatten(array)|
+--------------+
| [1, 2, 3, 4]|
| [1, 2, 3, 4]|
| [1, 2, 3, 4]|
| [1, 2, 3, 4]|
+--------------+
'''
51、sort_array
对数组类型的列按照元素的值进行排序,可以指定升序或者降序等排序规则。
df.select(F.sort_array(F.flatten("array"), asc=False)).show()'''
+---------------------------------+
|sort_array(flatten(array), false)|
+---------------------------------+
| [4, 3, 2, 1]|
| [4, 3, 2, 1]|
| [4, 3, 2, 1]|
| [4, 3, 2, 1]|
+---------------------------------+
'''
52、to_json
将结构化的数据(如StructType结构的数据)转换为JSON格式的字符串,方便存储或者传输等操作。
df = df.withColumn("json_string", F.to_json("person_info"))
df.select("json_string").show()'''
+--------------------+
| json_string|
+--------------------+
|{"firstname":"Jam...|
|{"firstname":"Mic...|
|{"firstname":"Rob...|
|{"firstname":"Mar...|
+--------------------+
'''
53、from_json
将包含JSON格式字符串的列解析转换为相应的结构化数据类型(比如StructType等),便于后续进一步处理其中的字段数据。
from pyspark.sql.types import StructType, StructField, StringType, DateType
json_schema = StructType([StructField("firstname", StringType(), True),StructField("lastname", StringType(), True),StructField("birthday", DateType(), True)
])
df.select(F.from_json("json_string", json_schema)).show()'''
+----------------------+
|from_json(json_string)|
+----------------------+
| {James, Smith, 19...|
| {Michael, Rose, 1...|
| {Robert, Williams...|
| {Maria, Jones, 19...|
+----------------------+
'''
54、udf
用于创建一个自定义函数,将其应用到DataFrame的每一行上。
def get_grade(score):if score >= 90:return "Grade A"elif score >= 80:return "Grade B"elif score >= 70:return "Grade C"elif score >= 60:return "Grade D"else:return "Grade E"get_grade_udf = F.udf(get_grade, StringType())
df.select("score", get_grade_udf("score")).show()'''
+-----+----------------+
|score|get_grade(score)|
+-----+----------------+
|60.86| Grade D|
| 80.0| Grade B|
| 91.0| Grade A|
| 59.5| Grade E|
+-----+----------------+
'''
55、pandas_udf
pandas_udf是PySpark中提供的一种机制,允许使用pandas库的高效数据处理能力来定义用户自定义函数,相较于普通的udf,pandas_udf利用了pandas在向量化计算等方面的优势,在处理大数据量时往往能有更好的性能表现。
@F.pandas_udf(StringType())
def get_grade_pandas_udf(score_series: pd.Series) -> pd.Series:result_series = score_series.apply(get_grade)return result_seriesdf.select("score", get_grade_pandas_udf(F.col("score"))).show()'''
+-----+---------------------------+
|score|get_grade_pandas_udf(score)|
+-----+---------------------------+
|60.86| Grade D|
| 80.0| Grade B|
| 91.0| Grade A|
| 59.5| Grade E|
+-----+---------------------------+
'''
56、row_number
用于分配一个唯一的序号给 DataFrame 中的每一行,通常在窗口函数的上下文中使用。
from pyspark.sql import Window
windowSpec = Window.partitionBy("country").orderBy(F.desc("score"))df = df.union(df.limit(1))
df.select("country", "score", F.row_number().over(windowSpec).alias("rn")).sort("country","rn").show()'''
+-------+-----+---+
|country|score| rn|
+-------+-----+---+
| NULL| 91.0| 1|
| USA| 80.0| 1|
| USA|60.86| 2|
| USA|60.86| 3|
| USA| 59.5| 4|
+-------+-----+---+
'''
57、rank
与row_number()类似,也是用于排名,但在遇到相同值时会分配相同的排名,并且下一个排名会出现 “空位”,即排名间断。
df.select("country", "score", F.rank().over(windowSpec).alias("rank")).sort("country","rank").show()'''
+-------+-----+----+
|country|score|rank|
+-------+-----+----+
| NULL| 91.0| 1|
| USA| 80.0| 1|
| USA|60.86| 2|
| USA|60.86| 2|
| USA| 59.5| 4|
+-------+-----+----+
'''
58、dense_rank
同样用于排名,在遇到相同值时分配相同排名,不过下一个排名是连续的,不会出现 “空位”。
df.select("country", "score", F.dense_rank().over(windowSpec).alias("dense_rank")).sort("country","dense_rank").show()'''
+-------+-----+----------+
|country|score|dense_rank|
+-------+-----+----------+
| NULL| 91.0| 1|
| USA| 80.0| 1|
| USA|60.86| 2|
| USA|60.86| 2|
| USA| 59.5| 3|
+-------+-----+----------+'''
59、stddev
计算指定列数值的总体标准差,可用于分析数据的离散程度。
df.select(F.stddev("score")).collect()[0][0]
'''
14.29461017306873
'''
60、var_samp
用于计算指定列数据的样本方差,反映数据的离散情况。另外var_pop用于计算总体方差。
df.select(F.var_samp("score")).collect()[0][0]
'''
204.33588000000003
'''
二、总结
pyspark.sql.functions中的这些函数为用户在数据处理、分析和转换等方面提供了丰富的工具,能够满足各种复杂的数据处理需求,熟练掌握这些函数将大大提高在 PySpark 环境下处理大数据的效率和能力。无论是简单的数据清洗还是复杂的数据分析任务,都可以从中找到合适的函数来完成。
相关文章:
PySpark3:pyspark.sql.functions常见的60个函数
目录 一、常见的60个函数 1、col 2、lit 3、sum 4、avg/mean 5、count 6、max 7、min 8、concat 9、substring 10、lower 11、upper 12、trim 13、ltrim 14、rtrim 15、split 16、explode 17、collect_list 18、collect_set 19、asc 20、desc 21、when 2…...
Python操作neo4j库py2neo使用之创建和查询(二)
Python操作neo4j库py2neo使用之创建和查询(二) py2neo 创建操作 1、连接数据库 from py2neo import Graph graph Graph("bolt://100.100.20.55:7687", auth(user, pwd), nameneo4j)2、创建Node from py2neo import Node, Subgraph # 创建…...
力扣11.23
1964. 找出到每个位置为止最长的有效障碍赛跑路线 你打算构建一些障碍赛跑路线。给你一个 下标从 0 开始 的整数数组 obstacles ,数组长度为 n ,其中 obstacles[i] 表示第 i 个障碍的高度。 对于每个介于 0 和 n - 1 之间(包含 0 和 n - 1&…...
golang实现TCP服务器与客户端的断线自动重连功能
1.服务端 2.客户端 生成服务端口程序: 生成客户端程序: 测试断线重连: 初始连接成功...
数据结构 (6)栈的应用举例
1. 递归调用 递归函数在执行时,会将每一层的函数调用信息(包括局部变量、参数和返回地址)存储在栈中。当递归函数返回时,这些信息会从栈中弹出,以便恢复之前的执行状态。栈的后进先出(LIFO)特性…...
谁的年龄最小(结构体专题)
题目描述 设计一个结构体类型,包含姓名、出生日期。其中出生日期又包含年、月、日三部分信息。输入n个好友的信息,输出年龄最小的好友的姓名和出生日期。 输入描述 首先输入一个整数n(1<n<10),表示好友人数,然后输入n行&…...
【论文笔记】LLaVA-KD: A Framework of Distilling Multimodal Large Language Models
Abstract 大语言模型(Large Language Models, LLM)的成功,使得研究者为了统一视觉和语言的理解去探索多模态大预言模型(Multimodal Large Language Models, MLLM)。 但是MLLM庞大的模型和复杂的计算使其很难应用在资源受限的环境,小型MLLM(s-MLLM)的表现…...
M|大脑越狱
rating: 7.0 豆瓣: 7.6 上映时间: “2015” 类型: M悬疑 导演: 约瑟夫怀特 Joseph White 主演: 亚历山大欧文 Alexander Owen爱德华富兰克林 Edward Franklin 国家/地区: 英国 片长/分钟: 20分钟 M|大脑越狱 想法不错,但是逻辑比较一般。属于…...
数据库编程(sqlite3)
一:数据库分类 常用的数据库 大型数据库 :Oracle商业、多平台、关系型数据库功能最强大、最复杂、市场占比最高的商业数据库 中型数据库 :Server是微软开发的数据库产品,主要支持windows平台 小型数据库 : mySQL是一个小型关系型…...
【C语言】关键字详解
【C语言】关键字详解 文章目录 [TOC](文章目录) 前言一、char1.定义字符串类型2.定义字符类型 二、short三、int四、long五、signed六、unsigned七、float八、double九、struct、union、enum十、void1.void用于函数声明,没有返回值的函数,其类型为 void。…...
什么是计算机网络
什么是计算机网络? 计算机网络的定义计算机网络的分类按覆盖范围分类按拓扑结构分类按通信传输介质分类按信号频带占用方式分类 计算机网络的功能信息交换资源共享分布式处理 计算机网络的组成计算机网络的定义计算机网络的分类按覆盖范围分类按拓扑结构分类按通信传…...
【大数据学习 | Spark-Core】Spark的分区器(HashPartitioner和RangePartitioner)
之前学过的kv类型上面的算子 groupby groupByKey reduceBykey sortBy sortByKey join[cogroup left inner right] shuffle的 mapValues keys values flatMapValues 普通算子,管道形式的算子 shuffle的过程是因为数据产生了打乱重分,分组、排序、join等…...
CSS3_BFC(十二)
BFC MDN对BFC的解释:块格式化上下文(Block Formating Context, BFC)是web页面的可视CSS渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域。 1、开启BFC flow-root对内容的影响是最低的&am…...
C0032.在Clion中使用MSVC编译器编译opencv的配置方法
使用MSVC编译器编译opencv的配置方法...
微信小程序中会议列表页面的前后端实现
题外话:想通过集成腾讯IM来解决即时聊天的问题,如果含语音视频,腾讯组件一年5万起步,贵了!后面我们改为自己实现这个功能,这里只是个总结而已。 图文会诊需求 首先是个图文列表界面 同个界面可以查看具体…...
WEB攻防-通用漏洞文件上传二次渲染.htaccess变异免杀
知识点: 1、文件上传-二次渲染 2、文件上传-简单免杀变异 3、文件上传-.htaccess妙用 4、文件上传-PHP语言特性 1、上传后门时,文件内容带.就不行 这时可以上传一个转换后的ip地址,ip地址对应网站包含后门代码 转换后的int会在访问的时候…...
vue实现列表滑动下拉加载数据
一、实现效果 二、实现思路 使用滚动事件监听器来检测用户是否滚动到底部,然后加载更多数据 监听滚动事件。检测用户是否滚动到底部。加载更多数据。 三、案例代码 <div class"drawer-content"><div ref"loadMoreTrigger" class&q…...
全面解析:HTML页面的加载全过程(四)--浏览器渲染之样式计算
主线程遍历得到的 DOM 树,依次为树中的每个节点计算出它最终的样式,称之为 Computed Style。 通过前面生成的DOM 树和 CSSOM 树,遍历 DOM 树,为每一个 DOM 节点,计算它的所有 CSS 属性,最后会得到一棵带有…...
#Verilog HDL# 谈谈代码中如何跨层次引用
目录 一 先谈作用问题 二 再谈跨层次问题 2.1 向下引用 2.2 向上引用 一 先谈作用问题 大多数编程语言都有一个称为作用域(scope)的特征,它定义了代码的某些部分对于变量和方法的可见性。作用域定义了一个命名空间,以避免同一命名空间内不同对象名称之间的冲突。 V…...
LeetCode 每日一题 2024/11/18-2024/11/24
记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步 目录 11/18 661. 图片平滑器11/19 3243. 新增道路查询后的最短距离 I11/20 3244. 新增道路查询后的最短距离 II11/21 3248. 矩阵中的蛇11/22 3233. 统计不是特殊数字的数字数量1…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
