注意:以下翻译的准确性尚未经过验证。这是使用 AIP ↗ 从原始英文文本进行的机器翻译。
F.date_add(start, days)
F.date_sub(start, days)
F.add_months(start, months)
F.datediff(end, start)
F.months_between(date1, date2)
F.last_day(date)
F.next_day(date, dayOfWeek)
F.year(column)
F.month(column)
F.dayofmonth(column)
F.hour(column)
F.minute(column)
F.second(column)
F.quarter(column)
F.dayofyear(column)
F.weekofyear(column)
以下是快速参考:
格式 | 示例 |
---|---|
yyyy-MM-dd | 1997-01-31 |
yyyy-MM-dd HH:mm | 1997-01-31 23:59:59 |
日期格式化字符串模式基于 Java 类 java.text.SimpleDateFormat。完整参考请见 日期和时间格式语法表 ↗。
F.to_date(column, format=None)
F.to_timestamp(column, format=None)
F.to_utc_timestamp(timestamp, tz)
F.unix_timestamp(timestamp=None, format='yyyy-MM-dd HH:mm:ss')
F.date_format(date, format)
F.from_unixtime(timestamp, format='yyyy-MM-dd HH:mm:ss')
F.from_utc_timestamp(timestamp, tz)
long
转换为timestamp
某些系统将时间戳存储为long
数据类型,以毫秒为单位。PySpark SQL 将时间戳存储为秒。我们必须将long
版本的时间戳除以1000,才能正确转换为timestamp
:
Copied!1 2 3 4
casted_timestamp = (F.col('timestamp') / 1000).cast("timestamp") df = df.withColumn("timestamp", casted_timestamp) # 将时间戳从毫秒转换为秒,然后转换为标准的时间格式 # 示例: 1531860192661 => 2018年7月17日 星期二 8:43:12 下午
我们也可以使用 F.from_unixtime(timestamp)
来提高清晰度:
Copied!1 2 3 4
# 将Unix时间戳(以毫秒为单位)转换为常规时间格式 timestamp = F.from_unixtime(F.col('timestamp') / 1000) # 使用转换后的时间戳更新DataFrame中的'timestamp'列 df = df.withColumn("timestamp", timestamp)
当从long
转换为timestamp
时,我们失去了一定程度的细粒度。SQL无法存储百分比或秒的小数。
F.trunc(date, format)
F.date_trunc(format, timestamp)