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_one
从date
格式转换为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|
+-----------------------+