Spark Scala: добавьте 10 дней к строке даты (не к столбцу) - PullRequest
0 голосов
/ 29 января 2019

У меня есть дата, и я хочу добавить и вычесть 10 дней к ней.Start_date и end_date являются динамическими переменными из одной таблицы и будут использоваться для фильтрации другой таблицы.

например.

val start_date = "2018-09-08"
val end_date   = "2018-09-15"

Я хочу использовать две даты выше в фильтре, показанном ниже;

myDF.filter($"timestamp".between(date_sub(start_date, 10),date_add(end_date, 10)))

Функции date_add и date_sub принимают только столбцы в качестве входных данных.Как я могу добавить / вычесть 10 (это произвольное число) из моих дат?

Спасибо

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Другой способ ... Если вы можете создать временное представление, то вы можете получить доступ к vals, используя $ interpolation.Вы должны убедиться, что формат даты и времени указан по умолчанию.

Проверьте это:

scala> val start_date = "2018-09-08"
start_date: String = 2018-09-08

scala> val end_date   = "2018-09-15"
end_date: String = 2018-09-15

scala> val myDF=Seq(("2018-09-08"),("2018-09-15")).toDF("timestamp").withColumn("timestamp",to_timestamp('timestamp))
myDF: org.apache.spark.sql.DataFrame = [timestamp: timestamp]

scala> myDF.show(false)
+-------------------+
|timestamp          |
+-------------------+
|2018-09-08 00:00:00|
|2018-09-15 00:00:00|
+-------------------+


scala> myDF.createOrReplaceTempView("ts_table")


scala> spark.sql(s""" select timestamp, date_sub('$start_date',10) as d_sub, date_add('$end_date',10) d_add from ts_table """).show(false)
+-------------------+----------+----------+
|timestamp          |d_sub     |d_add     |
+-------------------+----------+----------+
|2018-09-08 00:00:00|2018-08-29|2018-09-25|
|2018-09-15 00:00:00|2018-08-29|2018-09-25|
+-------------------+----------+----------+


scala>
0 голосов
/ 29 января 2019

Спасибо, Луис!Ваше решение сработало, для всех, кто заинтересован, оно выглядит как

1002 *
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...