As per my business logic week start day is monday and week end day is sunday
I want to get week end date which is sunday based on week number , some year has 53 weeks , it is not working for 53rd week alone
Expected value for dsupp_trans_dt is 2021-01-03
but as per below code it is null
scala> case class Data(id:Int,weekNumber:String)
defined class Data
scala> var stgDF = Seq(Data(100,"53/2020")).toDF()
stgDF: org.apache.spark.sql.DataFrame = [id: int, weekNumber: string]
scala> val weekNumber = "53/2020"
weekNumber: String = 53/2020
scala> val monthIdNum = "202001"
monthIdNum: String = 202001
scala> val isLeapYearFunc = (year: Int) => (((year % 4) == 0) && !(
| ((year % 100) == 0) &&
| !((year % 400) == 0))
| )
isLeapYearFunc: Int => Boolean = <function1>
scala> val isLeapYear = isLeapYearFunc(monthIdNum.substring(0,4).toInt)
isLeapYear: Boolean = true
scala> val kafkaFilePeriod = "2053"
kafkaFilePeriod: String = 2053
scala> stgDF = stgDF.withColumn("year_week_number",lit(weekNumber)).withColumn("is_leap_year",lit(isLeapYear)).withColumn("dsupp_trans_dt",
| when (col("is_leap_year") === true ,date_add(to_date(col("year_week_number"), "w/yyyy"),7)).otherwise(date_add(to_date(col("year_week_number"), "w/yyyy"),14)))
stgDF: org.apache.spark.sql.DataFrame = [id: int, weekNumber: string ... 3 more fields]
scala> stgDF.show(10,false)
+---+----------+----------------+------------+--------------+
|id |weekNumber|year_week_number|is_leap_year|dsupp_trans_dt|
+---+----------+----------------+------------+--------------+
|100|53/2020 |53/2020 |true |null |
+---+----------+----------------+------------+--------------+
The same works fine for below
scala> val weekNumber = "52/2020"
weekNumber: String = 52/2020
scala> stgDF = stgDF.withColumn("year_week_number",lit(weekNumber)).withColumn("is_leap_year",lit(isLeapYear)).withColumn("dsupp_trans_dt",
| when (col("is_leap_year") === true ,date_add(to_date(col("year_week_number"), "w/yyyy"),7)).otherwise(date_add(to_date(col("year_week_number"), "w/yyyy"),14)))
stgDF: org.apache.spark.sql.DataFrame = [id: int, weekNumber: string ... 3 more fields]
scala> stgDF.show
+---+----------+----------------+------------+--------------+
| id|weekNumber|year_week_number|is_leap_year|dsupp_trans_dt|
+---+----------+----------------+------------+--------------+
|100| 53/2020| 52/2020| true| 2020-12-27|
+---+----------+----------------+------------+--------------+