在Spark数据帧中过滤特定小时、分钟和秒之间的记录



假设我有一个数据帧

+--------------------+---------------+------+ | timestamp| login | Age | +--------------------+---------------+------+ 2016-06-01 01:05:20 | 7372 | 50| 2016-06-01 01:00:20 | 7374 | 35| 2016-06-01 01:10:20 | 7376 | 40|

我只需要1到1:10之间的记录,无论日期和

时间在unix_timestamp中为"yyyy-MM-dd HH:mm:ss"

如何提取这些记录?这是为了分析迟到的人

我使用下面的代码实现了它:

val attendenceDF = DF.withColumn("Attendence",when(date_format(DF("timestamp"),"HH:mm:ss").between("01:00:00","01:10:00"),"InTime").otherwise("NotInTime"))

attendenceDF.show()

+--------------------+---------------+------+-----------+ | timestamp| login | Age | Attendence| +--------------------+---------------+------+-----------+ 2016-06-01 01:05:20 | 7372 | 50|InTime | 2016-06-01 01:00:20 | 7374 | 35|InTime | 2016-06-01 01:10:20 | 7376 | 40|NotInTime |

您可以尝试使用函数包中的hourminute函数:

import org.apache.spark.sql.functions._
import org.apache.spark.sql.types._
val tsCol = col("timestamp").cast(TimestampType)
val filteredDF = df.filter(
  (hour(tsCol) === 1) && (minute(tsCol).between(0, 10))
)

如果时间戳是字符串类型,那么可以使用子字符串。

如果它是Unix类型的,那么您可以转换它,但更有效的是查看保存它的类型的确切库和格式,并检查是否有方法提取小时和分钟。

希望对你有帮助

相关内容

  • 没有找到相关文章

最新更新