通过


make_timestamp

从年、月、天、小时、分钟、秒和(可选)时区字段创建时间戳。 或者,从日期、时间和(可选)时区字段创建时间戳。 结果数据类型与配置 spark.sql.timestampType值一致。 如果配置 spark.sql.ansi.enabled 为 false,则函数在无效输入时返回 NULL。 否则,它将引发错误。

有关相应的 Databricks SQL 函数,请参阅 make_timestamp 函数

Syntax

import pyspark.sql.functions as sf

# From individual components
sf.make_timestamp(years=<years>, months=<months>, days=<days>, hours=<hours>, mins=<mins>, secs=<secs>)

# With timezone
sf.make_timestamp(years=<years>, months=<months>, days=<days>, hours=<hours>, mins=<mins>, secs=<secs>, timezone=<timezone>)

# From date and time
sf.make_timestamp(date=<date>, time=<time>)

# From date and time with timezone
sf.make_timestamp(date=<date>, time=<time>, timezone=<timezone>)

参数

参数 类型 Description
years pyspark.sql.Columnstr 表示年份,从 1 到 9999。 从各个组件创建时间戳时是必需的。 必须与月份、天、小时、分钟和秒一起使用。
months pyspark.sql.Columnstr 代表的年月,从1月1日(1月)到12日(12月)。 从各个组件创建时间戳时是必需的。 必须与年、天、小时、分钟和秒一起使用。
days pyspark.sql.Columnstr 要表示的月数,从 1 到 31。 从各个组件创建时间戳时是必需的。 必须与年、月、小时、分钟和秒一起使用。
hours pyspark.sql.Columnstr 要表示的一小时,从 0 到 23。 从各个组件创建时间戳时是必需的。 必须与年、月、天、分钟和秒一起使用。
mins pyspark.sql.Columnstr 要表示的分钟,从 0 到 59。 从各个组件创建时间戳时是必需的。 必须与年、月、天、小时和秒一起使用。
secs pyspark.sql.Columnstr 第二分钟及其表示的微分数,从 0 到 60。 该值可以是 13 等整数,也可以是 13.123 等分数。 如果 sec 参数等于 60,则秒字段设置为 0,并将 1 分钟添加到最终时间戳。 从各个组件创建时间戳时是必需的。 必须与年、月、天、小时和分钟一起使用。
timezone pyspark.sql.Columnstr 可选。 时区标识符。 例如,CET、UTC 等。
date pyspark.sql.Columnstr 要表示的日期,采用有效的 DATE 格式。 从日期和时间组件创建时间戳时是必需的。 只能与时间参数一起使用。
time pyspark.sql.Columnstr 要表示的时间,采用有效的 TIME 格式。 从日期和时间组件创建时间戳时是必需的。 只能与日期参数一起使用。

退货

pyspark.sql.Column:包含时间戳的新列。

例子

示例 1:从年、月、天、小时、分钟、秒和时区生成时间戳。

import pyspark.sql.functions as sf
df = spark.createDataFrame([[2014, 12, 28, 6, 30, 45.887, 'CET']],
    ['year', 'month', 'day', 'hour', 'min', 'sec', 'tz'])
df.select(
    sf.make_timestamp(df.year, df.month, df.day, 'hour', df.min, df.sec, 'tz')
).show(truncate=False)
+----------------------------------------------------+
|make_timestamp(year, month, day, hour, min, sec, tz)|
+----------------------------------------------------+
|2014-12-27 21:30:45.887                             |
+----------------------------------------------------+

示例 2:从年、月、天、小时、分钟和秒(不含时区)生成时间戳。

import pyspark.sql.functions as sf
df = spark.createDataFrame([[2014, 12, 28, 6, 30, 45.887]],
    ['year', 'month', 'day', 'hour', 'min', 'sec'])
df.select(
    sf.make_timestamp('year', 'month', df.day, df.hour, df.min, df.sec)
).show(truncate=False)
+--------------------------------------------------+
|make_timestamp(year, month, day, hour, min, sec) |
+--------------------------------------------------+
|2014-12-28 06:30:45.887                           |
+--------------------------------------------------+

示例 3:使用时区从日期和时间生成时间戳。

import pyspark.sql.functions as sf
from datetime import date, time
df = spark.range(1).select(
    sf.lit(date(2014, 12, 28)).alias("date"),
    sf.lit(time(6, 30, 45, 887000)).alias("time"),
    sf.lit("CET").alias("tz")
)
df.select(sf.make_timestamp(date=df.date, time=df.time, timezone=df.tz)).show(truncate=False)
+------------------------------------+
|make_timestamp(date, time, timezone)|
+------------------------------------+
|2014-12-27 21:30:45.887             |
+------------------------------------+

示例 4:从日期和时间生成时间戳(不含时区)。

import pyspark.sql.functions as sf
from datetime import date, time
df = spark.range(1).select(
    sf.lit(date(2014, 12, 28)).alias("date"),
    sf.lit(time(6, 30, 45, 887000)).alias("time")
)
df.select(sf.make_timestamp(date=df.date, time=df.time)).show(truncate=False)
+--------------------------+
|make_timestamp(date, time)|
+--------------------------+
|2014-12-28 06:30:45.887   |
+--------------------------+