spark scala从Dataframe创建列,其值取决于日期时间范围

时间:2019-04-03 19:27:18

标签: apache-spark apache-spark-sql

我正在尝试从一个看起来像这样的数据框中创建一个新列

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 am之前出生但在1am之后出生,在5am之后出生,但是在10 am之前出生,在10am之后出生。 第一个为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 个答案:

答案 0 :(得分:3)

您可以通过functions class中的hour函数(大多数函数以及Column类所在的地方)并链接几个{{1} } / when

otherwise