日付時刻関数(Date time functions)
add_months
def add_months(startDate: Column, numMonths: Int): Column
startDateにnumMonthsを加えた日付を返す。
例えば、startDate = “2021-01-01”, numMonths = 3の場合、”2021-04-01″を返す。
- startDate
データ型は、date, timestamp,stringのいずれか。
string型の場合は、date型にキャストできるフォーマット(yyyy-MM-dd or yyyy-MM-dd HH:mm:ss.SSSS)でなければならない。 - numMonths
startDateに加えたい月数。マイナスの値なら減算となる。 - 返り値
日付を返す(date型)。startDateがstring型でdate型にキャストできない場合はnullを返す。 - ver 1.5.0から
コード例
%spark
val df = Seq(("2021-01-01")).toDF("date")
.withColumn("date", to_date(col("date")))
.withColumn("date1", add_months(col("date"), -3))
.withColumn("date2", add_months(col("date"), 3))
df.show()
df.printSchema
アウトプット
+----------+----------+----------+
| date| date1| date2|
+----------+----------+----------+
|2021-01-01|2020-10-01|2021-04-01|
+----------+----------+----------+
root
|-- date: string (nullable = true)
|-- date1: date (nullable = true)
|-- date2: date (nullable = true)
current_date
def current_date(): Column
現在の日付を返す。
- ver 1.5.0から
コード例
%spark
val df = Seq(("2021-01-01")).toDF("date")
.withColumn("current_date", current_date())
df.show()
df.printSchema
アウトプット
+----------+------------+
| date|current_date|
+----------+------------+
|2021-01-01| 2021-06-27|
+----------+------------+
root
|-- date: string (nullable = true)
|-- current_date: date (nullable = false)
current_timestamp
def current_timestamp(): Column
現在のタイムスタンプを返す。
- ver 1.5.0から
コード例
%spark
val df = Seq(("2021-01-01")).toDF("date")
.withColumn("current_timestamp", current_timestamp())
df.show()
df.printSchema
アウトプット
+----------+-----------------------+
| date| current_timestamp |
+----------+-----------------------+
|2021-01-01|2021-06-27 13:48:43.085|
+----------+-----------------------+
root
|-- date: string (nullable = true)
|-- current_timestamp: timestamp (nullable = false)
date_add
def date_add(start: Column, days: Int): Column
startにdaysを加えた日付を返す。
例えば、start = “2021-01-01”, days = 3の場合、”2021-01-04″を返す。
- start
データ型は、date, timestamp,stringのいずれか。
string型の場合は、date型にキャストできるフォーマット(yyyy-MM-dd or yyyy-MM-dd HH:mm:ss.SSSS)でなければならない。 - days
startに加える日数。マイナスの値なら減算となる。 - returns
日付を返す(date型)。startがstring型でdate型にキャストできない場合はnullを返す。 - Since
ver 1.5.0から
コード
%spark
val df = Seq(("2021-01-01")).toDF("date")
.withColumn("date1", date_add(col("date"), 3))
.withColumn("date2", date_add(col("date"), -3))
df.show()
df.printSchema
アウトプット
+----------+----------+----------+
| date| date1| date2|
+----------+----------+----------+
|2021-01-01|2021-01-04|2020-12-29|
+----------+----------+----------+
root
|-- date: string (nullable = true)
|-- date1: date (nullable = true)
|-- date2: date (nullable = true)
date_format
def date_format(dateExpr: Column, format: String): Column
データ型date, timestamp, stringから、第二引数で指定したdateフォーマットのstring型の値に変換する。
- dateExpr
データ型は、date, timestamp,stringのいずれか。
string型の場合は、date型にキャストできるフォーマットパターン(yyyy-MM-dd or yyyy-MM-dd HH:mm:ss.SSSS)でなければならない。 - format
例えば、フォーマットパターンが、dd.MM.yyyyの場合、string型で 28.06.2021と返す。 - returns
string型を返す(date型)。dateExprがtimestampにキャストできないstring型の場合はnullを返す。 - Since
ver 1.5.0から - Exceptions thrown
フォーマットパターンが無効の場合は、IllegalArgumentException
コード例
%spark
val df = Seq(("2021-01-01")).toDF("date")
.withColumn("date1", date_format(col("date"), "dd/MM/yyyy HH:mm:ss"))
df.show()
df.printSchema
アウトプット
+----------+-------------------+
| date| date1|
+----------+-------------------+
|2021-01-01|01/01/2021 00:00:00|
+----------+-------------------+
root
|-- date: string (nullable = true)
|-- date1: string (nullable = true)
date_sub
def date_sub(start: Column, days: Int): Column
startからdaysを引いた日付を返す。
例えば、start = “2021-01-01”, days = 3の場合、”2020-12-29″を返す。
- start
データ型は、date, timestamp,stringのいずれか。
string型の場合は、date型にキャストできるフォーマット(yyyy-MM-dd or yyyy-MM-dd HH:mm:ss.SSSS)でなければならない。 - days
startから引く日数。マイナスの値なら加算となる。 - returns
日付を返す(date型)。startがstring型でdate型にキャストできない場合はnullを返す。 - Since
ver 1.5.0から
コード例
%spark
val df = Seq(("2021-01-01")).toDF("date")
.withColumn("date1", date_sub(col("date"), 3))
df.show()
df.printSchema
アウトプット
+----------+----------+
| date| date1|
+----------+----------+
|2021-01-01|2020-12-29|
+----------+----------+
root
|-- date: string (nullable = true)
|-- date1: date (nullable = true)
datediff
def datediff(start: Column, days: Int): Column
startからendまでの日数を返す。
例えば、start = “2021-01-01”, end = “2021-01-31“の場合、”30″を返す。
- end
データ型は、date, timestamp,stringのいずれか。
string型の場合は、date型にキャストできるフォーマット(yyyy-MM-dd or yyyy-MM-dd HH:mm:ss.SSSS)でなければならない。 - start
データ型は、date, timestamp,stringのいずれか。
string型の場合は、date型にキャストできるフォーマット(yyyy-MM-dd or yyyy-MM-dd HH:mm:ss.SSSS)でなければならない。 - returns
日数を返す(integer型)。startかendがstring型でdate型にキャストできない場合はnullを返す。
endがstartより前の場合は、マイナスの値を返す。 - Since
ver 1.5.0から
コード例
%spark
val df = Seq(("2021-01-01","2021-01-31")).toDF("start_date","end_date")
.withColumn("datediff",datediff(col("end_date"),col("start_date")))
df.show()
df.printSchema
アウトプット
+----------+----------+--------+
|start_date| end_date|datediff|
+----------+----------+--------+
|2021-01-01|2021-01-31| 30|
+----------+----------+--------+
root
|-- start_date: string (nullable = true)
|-- end_date: string (nullable = true)
|-- datediff: integer (nullable = true)
date_trunc
def date_trunc(format: String, timestamp: Column): Column
formatで指定された単位で切り捨てられたtimestampを返す。
例えば、date_trunc("year", "2018-11-19 12:01:19")
は、「2018-01-01 00:00:00」を返す。
- timestamp
データ型は、date, timestamp,stringのいずれか。
string型の場合は、date型にキャストできるフォーマット(yyyy-MM-dd or yyyy-MM-dd HH:mm:ss.SSSS)でなければならない。 - returns
timestamp型を返す。startがstring型でtimestamp型にキャストできない場合、または、有効でないformatの場合はnullを返す。 - Since
ver 2.3.0から
コード例
%spark
val df = Seq(("2021-05-10 22:22:22")).toDF("date")
.withColumn("date", to_timestamp(col("date")))
.withColumn("date1", date_trunc("year", col("date")))
.withColumn("date2", date_trunc("month", col("date")))
.withColumn("date3", date_trunc("day", col("date")))
.withColumn("date4", date_trunc("hour", col("date")))
.withColumn("date5", date_trunc("minute", col("date")))
.withColumn("date6", date_trunc("second", col("date")))
df.show()
アウトプット
+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+
| date| date1| date2| date3| date4| date5| date6|
+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+
|2021-05-10 22:22:22|2021-01-01 00:00:00|2021-05-01 00:00:00|2021-05-10 00:00:00|2021-05-10 22:00:00|2021-05-10 22:22:00|2021-05-10 22:22:22|
+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+
dayofmonth
def dayofmonth(e: Column): Column
date/timestamp/string型から、日付をinteger型で抽出する。
例えば、dayofmonth(col(“2021-05-01”))の場合は、1を返す。
- returns
integer型を返す。inputがstring型でdate型にキャストできない場合はnullを返す。 - Since
ver 1.5.0から
コード例
%spark
val df = Seq(("2021-05-01")).toDF("date")
.withColumn("dayofmonth",dayofmonth(col("date")))
df.show()
df.printSchema
アウトプット
+----------+----------+
| date|dayofmonth|
+----------+----------+
|2021-05-01| 1|
+----------+----------+
root
|-- date: string (nullable = true)
|-- dayofmonth: integer (nullable = true)
dayofweek
def dayofweek(e: Column): Column
date/timestamp/string型から、曜日をinteger型で抽出する。
- 1 -> 日曜日
- 2 -> 月曜日
- 3 -> 火曜日
- 4 -> 水曜日
- 5 -> 木曜日
- 6 -> 金曜日
- 7 -> 土曜日
例えば、dayofweek(col(“2021-06-19”))の場合は、7(土曜日)を返す。
- returns
integer型を返す。inputがstring型でdate型にキャストできない場合はnullを返す。 - Since
ver 2.3.0から
dayofyear
def dayofyear(e: Column): Column
date/timestamp/string型から、日数をinteger型で抽出する。
- returns
integer型を返す。inputがstring型でdate型にキャストできない場合はnullを返す。 - Since
ver 1.5.0から
コード例
%spark
val df = Seq(("2021-05-10")).toDF("date")
.withColumn("dayofyear",dayofyear(col("date")))
df.show()
df.printSchema
アウトプット
+----------+---------+
| date|dayofyear|
+----------+---------+
|2021-05-10| 130|
+----------+---------+
root
|-- date: string (nullable = true)
|-- dayofyear: integer (nullable = true)
from_unixtime
def from_unixtime(ut: Column, f: String): Column
unix時間(unix epoch : 1970-01-01 00:00:00 UTCからの経過秒数)を、timestampを表すStringに変換する。第二引数でフォーマットを指定できる。第二引数を指定しない場合は、yyyy-MM-dd HH:mm:ss のフォーマットになる。
- ut
string/integer型(long型にキャスト可能な数字)。unix epochより前のtimestampは表すにはマイナスを指定する。 - f
date timeのフォーマットパターン。 - returns
string型を返す。utがstring型でlong型にキャストできない場合、またはf が有効ではない場合はnullを返す。
コード例
%spark
val df = Seq(("999787346")).toDF("unixtime")
.withColumn("date",from_unixtime(col("unixtime"), "yyyy/MM/ss HH:mm:ss"))
.withColumn("date1",from_unixtime(col("unixtime")))
df.show()
df.printSchema
アウトプット
+---------+-------------------+-------------------+
| unixtime| date| date1|
+---------+-------------------+-------------------+
|999787346|2001/09/26 23:42:26|2001-09-06 23:42:26|
+---------+-------------------+-------------------+
root
|-- unixtime: string (nullable = true)
|-- date: string (nullable = true)
|-- date1: string (nullable = true)
from_utc_timestamp
def from_utc_timestamp(ts: Column, tz: String): Column
“2021-01-01 02:40:00.0″のtimestampをUTC(協定世界時)と解釈し、第二引数に指定したtz(タイムゾーン)に変換して返します。例えば、”GMT+1″なら”2021-01-01 03:40:00.0″を返します。
- ts
データ型は、date, timestamp,stringのいずれか。
string型の場合は、date型にキャストできるフォーマット(yyyy-MM-dd or yyyy-MM-dd HH:mm:ss.SSSS)でなければならない。 - tz
string型。formatは以下であるべき(参考URL)。- region-based zone IDs (area/city)
America/Los_Angeles
- zone offsets
GMT+9
- region-based zone IDs (area/city)
- returns
timestamp型を返す。tsがstring型でtimestamp型にキャストできない場合、またはtz が有効ではない場合はnullを返す。 - Since
ver 1.5.0から
コード例
%spark
val df = Seq(("2021-01-01 02:40:00.0")).toDF("time")
.withColumn("time1",from_utc_timestamp(col("time"), "GMT+9"))
.withColumn("time2",from_utc_timestamp(col("time"), "America/Los_Angeles"))
df.show()
df.printSchema
アウトプット
+--------------------+-------------------+-------------------+
| time| time1| time2|
+--------------------+-------------------+-------------------+
|2021-01-01 02:40:...|2021-01-01 11:40:00|2020-12-31 18:40:00|
+--------------------+-------------------+-------------------+
root
|-- time: string (nullable = true)
|-- time1: timestamp (nullable = true)
|-- time2: timestamp (nullable = true)