Сравните даты в scala, присутствующие в столбце данных - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь сравнить даты ниже в фильтре, как показано ниже: -

фрейм данных KIN_PRC_FILE имеет столбец pos_price_expiration_dt, который имеет значение 9999-12-31

val formatter = new SimpleDateFormat("yyyy-MM-dd");
val CURRENT_DATE = formatter.format(Calendar.getInstance().getTime());

val FILT_KMART_KIN_DATA= KIN_PRC_FILE.filter(s"(pos_price_expiration_dt)>=$CURRENT_DATE AND pos_price_type_cd").show(10)

, но, кажется, выше запросавозвращает нулевые записи, может кто-нибудь помочь мне понять, что здесь не так.

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Обратите внимание, что вы используете сравнение строк со значениями даты.Так как он у вас в порядке убывания, т.е. гггг-ММ-дд, это работает, но не всегда безопасно.

Вы должны рассмотреть приведение столбца к формату "дата", прежде чем делать такие сравнения.А на текущую дату вы всегда можете использовать встроенную переменную.Проверьте это:

scala> val KIN_PRC_FILE = Seq(("2018-11-01"),("2018-11-15"),("2018-11-30"),("2018-11-28"),(null)).toDF("pos_price_expiration_dt").withColumn("pos_price_expiration_dt",'pos_price_expiration_dt.cast("date"))
KIN_PRC_FILE: org.apache.spark.sql.DataFrame = [pos_price_expiration_dt: date]

scala> KIN_PRC_FILE.printSchema
root
 |-- pos_price_expiration_dt: date (nullable = true)


scala> KIN_PRC_FILE.show
+-----------------------+
|pos_price_expiration_dt|
+-----------------------+
|             2018-11-01|
|             2018-11-15|
|             2018-11-30|
|             2018-11-28|
|                   null|
+-----------------------+


scala> KIN_PRC_FILE.filter(s"pos_price_expiration_dt >= current_date ").show
+-----------------------+
|pos_price_expiration_dt|
+-----------------------+
|             2018-11-30|
|             2018-11-28|
+-----------------------+


scala>
0 голосов
/ 28 ноября 2018

Вам просто нужно добавить одиночные запятые в переменную current_date

KIN_PRC_FILE.filter(s"pos_price_expiration_dt >= '$CURRENT_DATE'")

Быстрый пример здесь

INPUT

df.show
+-----------------------+---+
|pos_price_expiration_dt| id|
+-----------------------+---+
|             2018-11-20|  a|
|             2018-12-28|  b|
|                   null|  c|
+-----------------------+---+

ВЫХОД

df.filter(s"pos_price_expiration_dt>='$CURRENT_DATE'").show

+-----------------------+---+
|pos_price_expiration_dt| id|
+-----------------------+---+
|             2018-12-28|  b|
+-----------------------+---+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...