스파크 프로그래밍을 하면서 사용한 시간 관련 기능들을 여기 모아둔다.

 

 

 

< Unix time 을 알아볼 수 있는 단위로 바꾸기 >

 

아래 명령어를 사용하여 임의로 만들 수 있다.

 

val timestamp: Long = System.currentTimeMillis / 1000

stackoverflow.com/a/11352208

 

times 라는 df 안에 유닉스 시간이 주르륵 있는 상황

 

scala> times.show
+----------+
|     value|
+----------+
|1593577235|
|1593576415|
|1593578261|

.....

 

 

아래처럼 바꿀 수 있다.

 

scala> times.select(col("value"), from_unixtime(col("value"),"yyyy-MM-dd hh:mm:ss").as("UTC date")).withColumn("Seoul Time", from_utc_timestamp(col("date"), "Asia/Seoul")).show
+----------+-------------------+-------------------+
|     value|               UTC date|         Seoul Time|
+----------+-------------------+-------------------+
|1593577235|2020-07-01 04:20:35|2020-07-01 13:20:35|
|1593576415|2020-07-01 04:06:55|2020-07-01 13:06:55|
|1593578261|2020-07-01 04:37:41|2020-07-01 13:37:41|

.....

 

https://sparkbyexamples.com/spark/spark-epoch-time-to-timestamp-date/

https://sparkbyexamples.com/spark/spark-sql-unix-timestamp/

https://hellomuzi.tistory.com/44

spark 에서 각종 시간 다루는 방법 : https://medium.com/expedia-group-tech/deep-dive-into-apache-spark-datetime-functions-b66de737950a

 

아래 블로그에서 실시간으로 변환을 해볼 수 있다.

https://heavenly-appear.tistory.com/257

 

 

 

 

< date 에 일 수 (day) 더하고 빼기 >

 

아래 함수를 사용해보자.

 


import java.text.SimpleDateFormat
import java.util.Calendar

def dateAddDay(date: String, days: Int, inputFormat: String, outputFormat: String) : String = {
  val dateAux = Calendar.getInstance()
  dateAux.setTime(new SimpleDateFormat(inputFormat).parse(date))
  dateAux.add(Calendar.DATE, days)
  return new SimpleDateFormat(outputFormat).format(dateAux.getTime())
}

http://bigdatatech.taleia.software/2016/01/11/add-and-subtract-days-from-a-timestamp-in-java-scala/

 

 

 

 

 

 

< 날짜가 a와 b 사이에 있는지 확인하기 >

 

org.joda.time.LocalDate 의 isAfter, isBefore 등의 메소드를 사용하여

내가 알아보고 싶은 날짜가 특정 날짜 사이에 있는지 판단한다.

시작 날짜 이상 끝 날짜 미만 으로 체크한다. 아래처럼.

from<= 날짜 <to

 


import org.joda.time.{Days, LocalDate}
def betweenDate(date:String, from:String, to:String):Boolean = {
  val d = LocalDate.parse(date)
  val f = LocalDate.parse(from)
  val t = LocalDate.parse(to)
 
  if(t.isBefore(f)) return false
  d.isEqual(f) || (d.isAfter(f) && d.isBefore(t))
}

 

그 밖의 기능에 대해 stackoverflow 의 답변들을 참고해본다.

stackoverflow.com/a/60645675/5868252

 

 

 

 

 

 

 

< column 단위로, 날짜 string 에서 month, day 등 추출하기 >

 

아래 참고

https://ourcstory.tistory.com/166

 

 

 

< timestamp 를 date 로 변환>

 

timestamp to date

아래 참고

 

https://sparkbyexamples.com/spark/spark-convert-timestamp-to-date/

 

 

 

 

 

 

+ Recent posts