我的要求是根据时间戳列过滤数据框,以便只有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)))
任何帮助将不胜感激。
答案 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
转换为long
,current_timestamp()
将提供当前日期和时间
你应该有dataframe
作为
+----+---------------------+-----+
|ID |timestamp |value|
+----+---------------------+-----+
|ID-1|2017-08-23 14:48:13.0|4.56 |
+----+---------------------+-----+
我希望答案很有帮助