1 col
col | qqpyspark 笔记 pyspark.sql.function col VS select_UQI-LIUWJ的博客-CSDN博客 取某一列 |
2 lit
lit | 创建一个包含指定值的列 |
3 date_trunc
date_trunc | 将日期截取成由第一个参数指定的字符串值
|
4 when
评估一组条件,并返回多个可能的结果表达式之一。 如果未调用 正常的带otherwise的when语句 对when之后的column名字进行修改 没有otherwise |
5 window
pyspark.sql.functions.window(
timeColumn: ColumnOrName,
windowDuration: str,
slideDuration: Optional[str] = None,
startTime: Optional[str] = None)
→ pyspark.sql.column.Column
- 用于处理时间序列数据,特别是在进行基于时间的聚合操作时
- 为数据集中的每个元素定义一个时间窗口,并在这些窗口上进行各种计算
timeColumn | 用于窗口划分的时间戳列。这个列必须是 Timestamp 类型 |
windowDuration | 窗口的持续时间,用字符串表示,例如 "10 minutes" 或 "1 second" |
slideDuration (可选) | 窗口的滑动间隔。新窗口会每隔这个滑动间隔生成。这个间隔必须小于或等于窗口持续时间 如果不指定,滑动间隔默认与窗口持续时间相同【即此时窗口没有重叠】 |
startTime | 如果你想要每小时的窗口从每小时的第15分钟开始,可以将 startTime 设置为 "15 minutes" |
窗口开始是包含的,但窗口结束是排除的。例如,12:05 将包含在 [12:05, 12:10) 的窗口中,但不包含在 [12:00, 12:05) 中。
5.1 举例:
5.1.1 创建pyspark dataframe
from pyspark.sql import SparkSession
from pyspark.sql.types import StructType, StructField, TimestampType, IntegerType
from datetime import datetime
from pyspark.sql.functions import window, col
schema = StructType([
StructField("timestamp", TimestampType(), True),
StructField("value", IntegerType(), True)
])
# Create sample data
data = [
(datetime(2024, 1, 1, 12, 0, 0), 10),
(datetime(2024, 1, 1, 12, 0, 30), 20),
(datetime(2024, 1, 1, 12, 1, 0), 30),
(datetime(2024, 1, 1, 12, 2, 0), 10),
(datetime(2024, 1, 1, 12, 2, 30), 20),
(datetime(2024, 1, 1, 12, 3, 0), 30),
]
df = spark.createDataFrame(data, schema)
df.show(truncate=False)
'''
+-------------------+-----+
|timestamp |value|
+-------------------+-----+
|2024-01-01 12:00:00|10 |
|2024-01-01 12:00:30|20 |
|2024-01-01 12:01:00|30 |
|2024-01-01 12:02:00|10 |
|2024-01-01 12:02:30|20 |
|2024-01-01 12:03:00|30 |
+-------------------+-----+
'''
5.1.2 执行window操作
windowed_df = df.groupBy(
window(col("timestamp"), "1 minute")
).agg(sum("value"))
windowed_df.show(truncate=False)
'''
+------------------------------------------+----------+
|window |sum(value)|
+------------------------------------------+----------+
|[2024-01-01 12:00:00, 2024-01-01 12:01:00]|30 |
|[2024-01-01 12:03:00, 2024-01-01 12:04:00]|30 |
|[2024-01-01 12:01:00, 2024-01-01 12:02:00]|30 |
|[2024-01-01 12:02:00, 2024-01-01 12:03:00]|30 |
+------------------------------------------+----------+
'''