Функция date_format, используемая в функции фильтра для фрейма данных, дает результат для дат, отличных от 2018-12-30 и 2018-12-31.Но для всех других дат, например 2018-11-30, он дает результат.
Добро пожаловать в Spark - версия 2.2.0
Использование Scala версии 2.11.8 (Java HotSpot (TM) 64-Bit Server VM, Java 1.8.0_192) Введите выражения для их оценки.Введите: help для получения дополнительной информации.
scala> var df = spark.read.load("hhhh://xxx.xxx.xxx.xxx:zzz/TIME.parquet")
df: org.apache.spark.sql.DataFrame = [DATE_SK: decimal(8,0), FISCAL_MONTH_SHORTDESC: string ... 27 more fields]
scala> df.filter("DATE_SK in (20181231)").select("FISCAL_YEAR", "FISCAL_QUARTER1", "FISCAL_MONTH1", "DATE_FIELD", "DATE_SK").show
+-----------+---------------+-------------+----------+--------+
|FISCAL_YEAR|FISCAL_QUARTER1|FISCAL_MONTH1|DATE_FIELD| DATE_SK|
+-----------+---------------+-------------+----------+--------+
| FY19| Q3 FY19| DEC FY19|2018-12-31|20181231|
+-----------+---------------+-------------+----------+--------+
scala> df.filter("**COALESCE(DATE_FORMAT(DATE_FIELD,'YYYY-MM-dd'),'Not Available') in ('2018-12-31')** AND DATE_SK in (20181231)").select("FISCAL_YEAR", "FISCAL_QUARTER1", "FISCAL_MONTH1", "DATE_FIELD", "DATE_SK").show
+-----------+---------------+-------------+----------+-------+
|FISCAL_YEAR|FISCAL_QUARTER1|FISCAL_MONTH1|DATE_FIELD|DATE_SK|
+-----------+---------------+-------------+----------+-------+
+-----------+---------------+-------------+----------+-------+
scala> df.filter("**COALESCE(DATE_FORMAT(DATE_FIELD,'YYYY-MM-dd'),'Not Available') in ('2018-11-30')** AND DATE_SK in (20181130)").selectExpr("FISCAL_YEAR", "FISCAL_QUARTER1", "FISCAL_MONTH1", "DATE_FIELD", "DATE_SK","DATE_FORMAT(DATE_FIELD,'YYYY-MM-dd')").show
+-----------+---------------+-------------+----------+--------+-----------------
|FISCAL_YEAR|FISCAL_QUARTER1|FISCAL_MONTH1|DATE_FIELD| DATE_SK|date_format(CAST(DATE_FIELD AS TIMESTAMP), YYYY-MM-dd)|
+-----------+---------------+-------------+----------+--------+-----------------
|FY19| Q3 FY19| NOV FY19|2018-11-30|20181130| 2018-11-30|
+-----------+---------------+-------------+----------+--------+-----------------
scala> df.printSchema
root
|-- DATE_SK: decimal(8,0) (nullable = true)
|-- FISCAL_MONTH_SHORTDESC: string (nullable = true)
|-- DATE_FIELD: date (nullable = true)
|-- FISCAL_YEAR: string (nullable = true)
|-- FISCAL_QUARTER: decimal(2,0) (nullable = true)
|-- FISCAL_MONTH1: string (nullable = true)
|-- FISCAL_QUARTER1: string (nullable = true)
|-- FISCAL_MONTH: decimal(2,0) (nullable = true)
|-- DAY_OF_MONTH1: string (nullable = true)
scala>
Какую функцию использовать для преобразования поля типа даты в строку в искре ??