假设我有一个数据框
+--------------------+---------------+------+
| 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"
如何提取这些记录? 这是为了分析迟到的人
答案 0 :(得分:1)
我使用以下代码实现了它:
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 |
答案 1 :(得分:0)
您可以尝试使用functions package的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))
)
答案 2 :(得分:-1)
如果时间戳是字符串类型,那么你可以使用子字符串。
如果它是unix类型,那么你可以转换它,但更有效的方法是查看它保存类型的确切库和格式,并检查提取小时和分钟的方法。
希望它可以帮助你:)