pyspark笔记 pyspark.sql.functions

1 col 

col

qqpyspark 笔记 pyspark.sql.function col VS select_UQI-LIUWJ的博客-CSDN博客
取某一列

 2 lit

lit

创建一个包含指定值的列

3  date_trunc

date_trunc

将日期截取成由第一个参数指定的字符串值

  • year, yyyy, yy——截取到年
  • month,mon,mm——截取到月
  • day,dd ——截取到天
  • microsecond
  • millisecond
  • second
  • minute
  • hour
  • week
  • quarter

 4 when

评估一组条件,并返回多个可能的结果表达式之一。

如果未调用pyspark.sql.Column.otherwise(),则对于未匹配的条件将返回None。

正常的带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        |
+------------------------------------------+----------+
'''

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UQI-LIUWJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值