Фильтрация искры scala для дат по датам, превышающим текущее время - PullRequest
2 голосов
/ 16 октября 2019

У меня в фрейме 1.6 есть фрейм данных, в котором я хотел бы выбрать все строки больше текущего времени. Я выполняю фильтрацию по столбцу "time_occurred" с этим типом формата "гггг-ММ-дд'ТХЧ: мм: сс.ССС". Мне было интересно, как лучше всего добиться этого?

1 Ответ

2 голосов
/ 17 октября 2019

Наилучшим способом было бы приведение поля к типу timestamp с использованием функции Regexp_replace для замены 'T'.

Затем с использованием current_timestamp функция, мы можем отфильтровать данные в кадре данных.

Example:

Spark-scala-1.6:

import sqlContext.implicits._
import org.apache.spark.sql.functions._
import org.apache.spark.sql.types._

//sample data

val df=sc.parallelize(Seq(("2019-10-17'T'18:30:45.123"),("2019-10-15'T'18:30:45.123"))).toDF("ts")

df.filter(regexp_replace('ts,"'T'"," ").cast("timestamp") > current_timestamp).show(false)

Result:

+-------------------------+
|ts                       |
+-------------------------+
|2019-10-17'T'18:30:45.123|
+-------------------------+

Если вам нужно заменить 'T', чтобы получить тип отметки времени для поля ts, используйте этот подход.

df.withColumn("ts",regexp_replace('ts,"'T'"," ").cast("timestamp"))
  .filter('ts > current_timestamp).show(false)

Result:

+-----------------------+
|ts                     |
+-----------------------+
|2019-10-17 18:30:45.123|
+-----------------------+

Результат ts поле будет иметь тип Timestamp.

...