PySpark:将时间戳添加到日期列,并将整列重新格式化为时间戳数据类型



PySpark中有以下示例数据帧。该列当前为Date数据类型。

scheduled_date_plus_one
12/2/2018
12/7/2018

我想重新格式化日期,并根据24小时时钟添加时间戳凌晨2点。以下是我想要的数据帧列输出:

scheduled_date_plus_one
2018-12-02T02:00:00Z
2018-12-07T02:00:00Z

如何实现上述目标?我知道如何在Python Pandas中做到这一点,但不熟悉PySpark。

我知道我想要的列将是字符串数据类型,因为我的值中有"T"one_answers"Z"。没关系。。。我想我已经知道如何将字符串数据类型转换为时间戳了,所以我已经做好了准备。

让我们为您创建这个PySpark DataFrame。您必须从functions模块-导入to_date

步骤0:导入这4个函数-

from pyspark.sql.functions import to_date, date_format, concat, lit

步骤1:

from pyspark.sql.functions import to_date, date_format, concat, lit
values = [('12/2/2018',),('12/7/2018',)]
df = sqlContext.createDataFrame(values,['scheduled_date_plus_one'])
df = df.withColumn('scheduled_date_plus_one',to_date('scheduled_date_plus_one','MM/dd/yyyy'))
df.printSchema()
root
|-- scheduled_date_plus_one: date (nullable = true)
df.show()
+-----------------------+
|scheduled_date_plus_one|
+-----------------------+
|             2018-12-02|
|             2018-12-07|
+-----------------------+

正如我们在.printSchema()中看到的,我们有date格式的日期。因此,作为我们的第一步,我们创建了所需的DataFrame

第2步:scheduled_date_plus_onedate格式转换为string格式,这样我们就可以将T02:00:00Z连接到它。date_format将日期转换为所需格式的字符串。我们服用了yyyy-MM-dd

df = df.withColumn('scheduled_date_plus_one',date_format('scheduled_date_plus_one',"yyyy-MM-dd"))
df.printSchema()
root
|-- scheduled_date_plus_one: string (nullable = true)
df.show()
+-----------------------+
|scheduled_date_plus_one|
+-----------------------+
|             2018-12-02|
|             2018-12-07|
+-----------------------+

上面的.printSchema()表明scheduled_date_plus_one被转换为string格式,现在我们可以做concatenation部分。

步骤3:连接-为此,我们使用concat函数。注意-您必须在lit()函数中屏蔽T02:00:00Z,因为我们不是连接两列。

df = df.withColumn('scheduled_date_plus_one',concat('scheduled_date_plus_one',lit('T02:00:00Z')))
df.show()
+-----------------------+
|scheduled_date_plus_one|
+-----------------------+
|   2018-12-02T02:00:00Z|
|   2018-12-07T02:00:00Z|
+-----------------------+

相关内容

  • 没有找到相关文章

最新更新