How to convert pyspark string to datetime?
在本範例你會學到:
to_date
使用方式 (New in version 2.2
)unix_timestamp
使用方式
在本範例你需要先準備好:
- 本範例環境是
pyspark 版本 >= 2.4
- 歡樂愉快的學習精神
1.Create Dataframe
建立一個簡單的水果清單以及進貨日期,一開始日期是 string
:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from pyspark import SparkConf, SparkContext
from pyspark.sql import SparkSession
import pyspark.sql.functions as F
from pyspark.sql.types import *
spark = SparkSession.builder.appName('date_process').getOrCreate()
# Create dataset
df = spark.createDataFrame([("bell fruit", "apple", "2020/05/26"), \
("bell fruit", "banana", "2020/05/27"), \
("banana", "apple", "2020/05/28"), \
], ["fruit_1", "fruit_2", "date"])
2.轉換 date 格式
非常簡單的方法,使用 to_date
,前面的 F
是在前面 import 時取的新名稱 import pyspark.sql.functions as F
,後面的 yyyy/MM/dd
格式為原始字串的格式,如果原始字串是 2020-05-27
就要改成 yyyy-MM-dd
要注意的是這個方法是在 spark 2.2 版本
中才新增的喔!!
df_todate = df.withColumn("date", F.to_date(F.col("date"), 'yyyy/MM/dd'))
執行後就會看到資料的格式已經從 string
轉成 date
型態了!
3.轉換 timestamp 格式
這裡也相當的簡單,如果需要將時間格式轉成 timestamp,只要使用 unix_timestamp
就可以了,跟上面的 F.to_date
使用方法是一模一樣的喔!
df_timestamp = df.withColumn('timestamp',F.unix_timestamp(F.col('date'),'yy/MM/dd'))
可以看到新增了一個 timestamp 欄位,型態為 int
參考資料
若有任何問題與指教歡迎與我聯繫,若覺得我的內容不錯麻煩幫我隨便點個廣告,謝謝。
在 pyspark.sql.functions
其實有許多好用的小 function 可以直接使用,也不用再自己辛苦的寫 udf
(User Defined function),在之後的介紹會再慢慢帶給大家。下方為今天介紹的兩種好用的小function。
https://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.functions.to_date