Странное поведение в версии Spark 2.2 с функцией date_format - PullRequest
0 голосов
/ 13 февраля 2019

Функция 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>

Какую функцию использовать для преобразования поля типа даты в строку в искре ??

...