спарк scala создать столбец из Dataframe со значениями, зависящими от диапазона времени и даты - PullRequest
1 голос
/ 03 апреля 2019

Я пытаюсь создать новый столбец из кадра данных, который, скажем, выглядит как

names|birthtime-datetime|
joe|2017-03-29 2:23:38|
mike|2017-03-29 3:53:38|
mary|2017-03-29 11:63:38|
.....

Я хочу добавить столбец, который в зависимости от того, находится ли столбец DateTime в диапазоне, получает int. скажем, в этом случае есть 3 категории. родился до 5:31 утра, но после 1 часа ночи, родился после 5 утра, но до 10 утра, родился после 10 утра. первый получает 1, второй 2, третий 3, поэтому данные должны выглядеть как

names|birthtime-datetime|NewCol|
joe|2017-03-29 2:23:38|1|
mike|2017-03-29 3:53:38|1|
mary|2017-03-29 11:63:38|3|
.....

Я бы предпочел не использовать UDF, но я открыт для UDF. Я использую Scala. Одна мысль заключалась в том, чтобы фильтровать по группам на основе временного диапазона, добавлять новый столбец, а затем объединять ... по одному для каждой группы. это кажется очень глупой идеей ... но она у меня была.

1 Ответ

3 голосов
/ 03 апреля 2019

Вы можете достичь того, что вы хотите, с помощью функции hour из класса functions (место, где находится большинство функций, наряду с классом Column), и путем объединения нескольких when / otherwise.

// let's create data
val df = Seq(("joe", "2017-03-29 2:23:38"), 
             ("mike", "2017-03-29 3:53:38"),
             ("mary", "2017-03-29 11:03:38"))
        .toDF("name", "date")
        .select('name, to_timestamp('date) as "date")

// Then, let's extract the hour and add your logic
// (I'm not sure it is your exact logic, but you see the idea)
df.withColumn("h", hour('date))
  .withColumn("int", when('h >= 1 && 'h < 5, 1)
                      .otherwise(when('h >= 5 && 'h < 10, 2)
                        .otherwise(3)))
  .show
+----+-------------------+---+---+
|name|               date|  h|int|
+----+-------------------+---+---+
| joe|2017-03-29 02:23:38|  2|  1|
|mike|2017-03-29 03:53:38|  3|  1|
|mary|2017-03-29 11:03:38| 11|  3|
+----+-------------------+---+---+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...