根据时间戳列过滤数据帧

时间:2017-08-23 08:33:35

标签: scala apache-spark apache-spark-sql

我的要求是根据时间戳列过滤数据框,以便只有10分钟的数据。 Dataframe看起来像:

ID,timestamp,value
ID-1,8/23/2017 6:11:13,4.56
ID-2,8/23/2017 6:5:21,5.92
ID-3,8/23/2017 5:49:13,6.00

我正在尝试以下代码,但没有获得所需的输出

df.filter(to_date(df("timestamp")).gt(lit(now.get(Calendar.MINUTE)-10)))

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

鉴于dataframe

+----+------------------+-----+
|ID  |timestamp         |value|
+----+------------------+-----+
|ID-1|8/23/2017 14:48:13|4.56 |
|ID-2|8/23/2017 6:5:21  |5.92 |
|ID-3|8/23/2017 5:49:13 |6.0  |
+----+------------------+-----+ 

和当前时间

2017-08-23 14:53:33

您可以执行以下操作

import org.apache.spark.sql.functions._
df.withColumn("timestamp", unix_timestamp($"timestamp", "MM/dd/yyyy HH:mm:ss"))
      .filter((unix_timestamp(current_timestamp()) - $"timestamp")/60 < 10)
    .select($"ID", $"timestamp".cast(TimestampType), $"value")

其中unix_timestamp会将DateTimeStamp转换为longcurrent_timestamp()将提供当前日期和时间

你应该有dataframe作为

+----+---------------------+-----+
|ID  |timestamp            |value|
+----+---------------------+-----+
|ID-1|2017-08-23 14:48:13.0|4.56 |
+----+---------------------+-----+

我希望答案很有帮助