在Pyspark数据框中添加1小时的时间戳列

时间:2017-12-04 19:29:07

标签: python pyspark

. |-- Project | |-- Generic Keywords | | |-- Web App A | | | `-- GUI_Actions.robot | | |-- Web App B | | | |-- GUI_Actions.robot | | | |-- DB_Actions.robot | | | |-- ... | | `-- ... | |-- Tests | | `-- Web App A | | |-- Suite1.robot | | |-- Suite2.robot | | |-- ... | | `-- Web App B | | |-- Suite1.robot | | |-- Suite2.robot | | |-- ... 我有一个名为pyspark的列。这是一个test_time列。

该列有如下记录。

timestamp

现在我想将2017-03-12 03:19:51.0 2017-03-12 03:29:51.0 添加到1 hour列中的记录。

结果:

test_time

如何实现我的结果。

我在下面讨论

2017-03-12 04:19:51.0
2017-03-12 04:29:51.0

得到以下错误

df['test_time'] = df['test_time'].apply(lambda x: x - pd.DateOffset(hours=1))

2 个答案:

答案 0 :(得分:2)

将其转换为UTC时间戳后,应该非常容易。这是一种方法:

from pyspark.sql.functions import to_utc_timestamp,from_utc_timestamp
from datetime import timedelta

## Create a dummy dataframe
df = sqlContext.createDataFrame([('1997-02-28 10:30:00',)], ['t'])

## Add column to convert time to utc timestamp in PST
df2 = df.withColumn('utc_timestamp',to_utc_timestamp(df.t,"PST"))

## Add one hour with the timedelta function
df3 = df2.map(lambda x: (x.t,x.utc_timestamp+timedelta(hours=1))).toDF(['t','new_utc_timestamp'])

## Convert back to original time zone and format
df4 = df3.withColumn('new_t',from_utc_timestamp(df3.new_utc_timestamp,"PST"))

" new_t" df4中的列是根据您的系统将所需的列转换回适当的时区。

答案 1 :(得分:1)

在pyspark中执行此操作的正确方法是:

from pyspark.sql.functions expr
df = df.withColumn("test_time_plus_hour", df['test_time'] + expr('INTERVAL 1 HOURS'))