Pyspark中pyspark.sql.functions常用方法(2)(时间函数)

server/2024/10/18 17:05:08/

文章目录

  • pyspark sql functions
    • current_database
    • current_date 获取当前日期
    • add_months 月份操作
    • date_add 日操作增加
    • date_sub 日操作减少与date_add相反
    • date_format 时间格式化
    • weekofyear 将给定日期的周数提取为整数
    • year 提取年份
    • month 提取月份
    • hour 提取小时
    • minute 提取分钟
    • seconds 提取秒
    • last_day 日期所属月份的最后一天
    • localtimestamp 返回时间戳
    • next_day 获取下一个日期
    • make_date 拼接日期
    • to_date 转换日期格式
    • trunc 截断重置时间
    • weekday 返回日期所在星期几

spark_sql_functions_1">pyspark sql functions

current_database

返回当前数据库

spark.range(1).select(current_database()).show()  
+------------------+
|current_database()|
+------------------+
|           default|
------------------+

current_date 获取当前日期

df.withColumn('ldsx',sf.current_date()).show()  
+---+----------+
| id|      ldsx|
+---+----------+
|  0|2024-10-09|
+---+----------+

add_months 月份操作

df = spark.createDataFrame([('2015-04-08', 2)], ['dt', 'add'])
df.show()
+----------+---+
|        dt|add|
+----------+---+
|2015-04-08|  2|
+----------+---+df.select(sf.add_months(df.dt, 1).alias('next_month')).show()
+----------+
|next_month|
+----------+
|2015-05-08|
+----------+df.select(sf.add_months('dt', -2).alias('prev_month')).show()
+----------+
|prev_month|
+----------+
|2015-02-08|
+----------+

date_add 日操作增加

df = spark.createDataFrame([('2015-04-08', 2,)], ['dt', 'add'])
# 日期加1
df.select(date_add(df.dt, 1).alias('next_date')).collect()
[Row(next_date=datetime.date(2015, 4, 9))]
# 日期-1
df.select(date_add('dt', -1).alias('prev_date')).collect()
[Row(prev_date=datetime.date(2015, 4, 7))]

date_sub 日操作减少与date_add相反

df.show()
+----------+---+
|        dt|sub|
+----------+---+
|2015-04-08|  2|
+----------+---+df.select(sf.date_sub(df.dt, 1).alias('prev_date')).show()
+----------+
| prev_date|
+----------+
|2015-04-07|
+----------+df.select(sf.date_sub(df.dt, 5).alias('prev_date')).show()
+----------+
| prev_date|
+----------+
|2015-04-03|
+----------+df.select(sf.date_sub(df.dt, -5).alias('prev_date')).show()
+----------+
| prev_date|
+----------+
|2015-04-13|
+----------+

date_format 时间格式化

df.show()
+----------+
|        dt|
+----------+
|2015-04-08|
+----------+
df.select(sf.date_format('dt', 'MM/dd/yyy').alias('date')).show()
+----------+
|      date|
+----------+
|04/08/2015|
+----------+

weekofyear 将给定日期的周数提取为整数

df = spark.createDataFrame([('2015-04-08',)], ['dt'])
df.show()
+----------+
|        dt|
+----------+
|2015-04-08|
+----------+
df.select(sf.weekofyear(df.dt).alias('week')).show()
+----+
|week|
+----+
|  15|
+----+
df = spark.createDataFrame([('2015-04-01',)], ['dt'])
df.select(sf.weekofyear(df.dt).alias('week')).show()
+----+
|week|
+----+
|  14|
+----+

year 提取年份

df.select(sf.year(df.dt).alias('year')).show()
+----+
|year|
+----+
|2015|
+----+

month 提取月份

df = spark.createDataFrame([('2015-04-08',)], ['dt'])
df.show()
+----------+
|        dt|
+----------+
|2015-04-08|
+----------+
df.select(sf.month(df.dt).alias('month')).show()
+-----+
|month|
+-----+
|    4|
+-----+

hour 提取小时

df = spark.createDataFrame([(datetime.datetime(2015, 4, 8, 13, 8, 15),)], ['ts'])
df.show()
+-------------------+
|                 ts|
+-------------------+
|2015-04-08 13:08:15|
+-------------------+
df.select(sf.minute('ts').alias('hour')).show()
+------+
|minute|
+------+
|    13|
+------+

minute 提取分钟

df = spark.createDataFrame([(datetime.datetime(2015, 4, 8, 13, 8, 15),)], ['ts'])
df.show()
+-------------------+
|                 ts|
+-------------------+
|2015-04-08 13:08:15|
+-------------------+
df.select(sf.minute('ts').alias('minute')).show()
+------+
|minute|
+------+
|     8|
+------+

seconds 提取秒

import datetime
df = spark.createDataFrame([(datetime.datetime(2015, 4, 8, 13, 8, 15),)], ['ts'])
df.show()
+-------------------+
|                 ts|
+-------------------+
|2015-04-08 13:08:15|
+-------------------+
# 返回秒
df.select(sf.second('ts').alias('second')).show()
+------+
|second|
+------+
|    15|
+------+

last_day 日期所属月份的最后一天

df = spark.createDataFrame([('2015-04-08',)], ['dt'])
df.show()
+----------+
|        dt|
+----------+
|2015-04-08|
+----------+
df.select(sf.last_day(df.dt).alias('date')).show()
+----------+
|      date|
+----------+
|2015-04-30|
+----------+

localtimestamp 返回时间戳

df.select(sf.localtimestamp()).collect()
[Row(localtimestamp()=datetime.datetime(2024, 10, 9, 15, 45, 17, 57000))]

next_day 获取下一个日期

“Mon”, “Tue”, “Wed”, “Thu”, “Fri”, “Sat”, “Sun”

# 获取当前时间的下一个周日
df.select(sf.next_day(df.d, 'Sun').alias('date')).show()
+----------+
|      date|
+----------+
|2015-08-02|
+----------+
# 获取当前时间的下一个周六
df.select(sf.next_day(df.d, 'Sat').alias('date')).show()
+----------+
|      date|
+----------+
|2015-08-01|
+----------+

make_date 拼接日期

参数三个column,分别是年月日

df = spark.createDataFrame([(2020, 6, 26)], ['Y', 'M', 'D'])
df.show()
+----+---+---+
|   Y|  M|  D|
+----+---+---+
|2020|  6| 26|
+----+---+---+df.select(sf.make_date(df.Y, df.M, df.D).alias("datefield")).show()
+----------+
| datefield|
+----------+
|2020-06-26|
+----------+df.select(sf.make_date(sf.lit('2020'), sf.lit('10'), sf.lit('13')).alias("datefield")).show()
+----------+
| datefield|
+----------+
|2020-10-13|
+----------+

to_date 转换日期格式

参数:1.要转换的column,2.day format(可选)

col.cast("date")

df = spark.createDataFrame([('1997-02-28 10:30:00',)], ['t'])
df.printSchema()
root|-- t: string (nullable = true)
spark.createDataFrame([('1997-02-28 10:30:00',)], ['t']).collect()
[Row(t='1997-02-28 10:30:00')]# 转换
df.select(sf.to_date(df.t).alias('date')).collect()
[Row(date=datetime.date(1997, 2, 28))]# 可以使用format
df.select(sf.to_date(df.t, 'yyyy-MM-dd HH:mm:ss').alias('date')).show()
+----------+
|      date|
+----------+
|1997-02-28|
+----------+

trunc 截断重置时间

‘year’, ‘yyyy’, ‘yy’ to truncate by year, or ‘month’, ‘mon’, ‘mm’ to truncate by month Other options are: ‘week’, ‘quarter’

# 按年截 月日初始
df.select(sf.trunc(df.d, 'year').alias('year')).show()
+----------+
|      year|
+----------+
|1997-01-01|
+----------+
# 按月截 日初始
df.select(sf.trunc(df.d, 'mon').alias('year')).show()
+----------+
|      year|
+----------+
|1997-02-01|
+----------+

weekday 返回日期所在星期几

返回日期/时间戳的星期几(0=星期一,1=星期二,…,6=星期日)

f = spark.createDataFrame([('2015-04-08',)], ['dt'])
df.select(weekday('dt').alias('day')).show()
+---+
|day|
+---+
|  2|
+---+

http://www.ppmy.cn/server/132806.html

相关文章

基于单片机的草坪培育智能控制系统设计

本系统可完成草坪培养培育过程中土壤湿度、光照强度和空气温度的监测与控制。本次设计系统由单片机控制器、土壤湿度传感器、光照强度传感器、温度传感器、A/D转换器、液晶显示器、继电器模块、WIFI模块、报警器、按键等组成。传感器可获取土壤湿度、光照强度和温度信息&#x…

Flume面试整理-多种数据流配置

Flume支持多种数据流配置,能够根据不同的使用场景灵活地收集和传输数据。这些配置主要包括单节点流、级联流、复合流、广播流和多播流等。以下是对这些数据流配置的详细介绍: 1. 单节点流 (Single Node Flow) ● 描述:在最简单的配置中,数据流在一个Flume代理(Agent)内部…

QT C++ 软键盘/悬浮键盘/触摸屏键盘的制作

目录 1、前言 2、界面设计 3、英文、数字的输入 4、符号的输入 5、中文的输入 6、中文拼音库的选择 7、其他 8、结语 1、前言 使用QT C在带显示器的Linux系统 开发板上(树莓派等)编写操作UI界面时,很多时候都需要一个软键盘来输入文字…

FPGA实现PCIE与电脑端QT上位机双向数据传输,基于XDMA中断模式,提供3套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案 3、PCIE基础知识扫描4、工程详细设计方案工程设计原理框图电脑端视频QT上位机XDMA配置及使用AXI-GPIOXDMA中断模块FDMA图像缓存Windows版本XDMA驱动安装Linux版本XDMA驱动安装工程源码架构Vivado工程注意事项PCI…

Docker学习笔记(1)- Docker基本信息

1. Docker出现的原因 一款产品从开发到上线,一般至少有开发 /线上 两套环境!每套环境的配置都不同。开发与运维之间的难题:我在自己电脑上可以运行,版本更新导致服务不可用……分布式系统的环境配置十分麻烦,每一台机…

python 使用faker库 生成数据 -001

Welcome to Faker’s documentation! — Faker 30.3.0 documentationVersion1: Example from docs:from faker import Faker from faker.providers import internet for i in range(2): #批量生成数据fake Faker()name fake.name()address fake.address()text f…

php常用设计模式之工厂模式

引言 在日常开发中,我们一些业务场景需要用到发送短信通知。然而实际情况考虑到不同厂商之间的价格、实效性、可能会出现的情况等 我们的业务场景往往会接入多个短信厂商来保证我们业务的正常运行,而不同的短信厂商(如阿里云短信、腾讯云短信…

React入门(1)——我的第一个React.js项目

创建日期: 2020年2月22日 官网 中文官方文档 React入门系列 目录导引 一.使用create-react-app命令创建 React 官方提供了一个脚手架用于初始化React项目,使用 create-react-app 可以简化手动设置流程。 官方网站的 Tutorial 也是以此为例。 注意:项目命…