Как сравнить столбец со столбцами в одном и том же кадре данных в Apache Spark - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть столбец даты "a", который нужно сравнить с двумя другими столбцами "b" и "c" типа date.Все эти столбцы принадлежат одному фрейму данных.

Пример данных выглядит следующим образом:

{
    "a": "10 - 12 - 2019",
    "somecol": {
        "startdate": "10 - 06 - 2019",
        "enddate": "10 - 12 - 2020"
    }
}

, если col ("a") находится между "startdate" и "enddate", то этодействительная запись для меня.Как я могу сделать это в искре.Одна вещь, я могу взорвать «somecol», а затем сделать соединение и сравнить с условием.Но я хотел бы знать, есть ли другие способы.

Ожидаемый результат:

, так как значение столбца "a" находится между "startdate" и "enddate" конечного результата

1011 *

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Вот мое решение.

   val data = Seq(("10-12-2019", "10-06-2019", "10-12-2020"),
      ("11-12-2020", "10-06-2019", "10-12-2020"))

    val spark = getSession()

    import spark.implicits._
    val df = spark.sparkContext.parallelize(data).toDF("a", "startdate", "enddate")


    import org.apache.spark.sql.functions.to_date

    val modifiedDF = df.withColumn("a", to_date($"a", "dd-MM-yyyy"))
      .withColumn("startdate", to_date($"startdate", "dd-MM-yyyy"))
.withColumn("enddate", to_date($"enddate", "dd-MM-yyyy"))

  modifiedDF.withColumn("isValid", !$"a".gt($"enddate").and(!$"a".lt($"enddate"))).show()

Результат

+----------+----------+----------+-------+
|         a| startdate|   enddate|isValid|
+----------+----------+----------+-------+
|2019-12-10|2019-06-10|2020-12-10|   true|
|2020-12-11|2019-06-10|2020-12-10|  false|
+----------+----------+----------+-------+
0 голосов
/ 15 февраля 2019
val inputDF = spark.sparkContext.parallelize(List(
        ("2018-12-12", "2018-12-01", "2018-12-31"),
        ("2019-02-12", "2018-12-11", "2018-12-12")
    )).toDF("ds", "start", "end")
      .select(col("ds").cast("date"), col("start").cast("date"), col("end").cast("date"))

val outputDF = inputDF.withColumn("status", col("ds") >= col("start") &&  col("ds") <= col("end"))
outputDF.show()


+----------+----------+----------+-------+
|        ds|     start|       end| status|
+----------+----------+----------+-------+
|2018-12-12|2018-12-01|2018-12-31|   true|
|2019-02-12|2018-12-11|2018-12-12|  false|
+----------+----------+----------+-------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...