假设我有一个数据帧
+--------------------+---------------+------+
| 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 |
您可以尝试使用函数包中的hour
和minute
函数:
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类型的,那么您可以转换它,但更有效的是查看保存它的类型的确切库和格式,并检查是否有方法提取小时和分钟。
希望对你有帮助