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

时间:2016-08-08 15:31:57

标签: apache-spark dataframe apache-spark-sql

假设我有一个数据框

+--------------------+---------------+------+ | 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"

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

3 个答案:

答案 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 packagehourminute函数:

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类型,那么你可以转换它,但更有效的方法是查看它保存类型的确切库和格式,并检查提取小时和分钟的方法。

希望它可以帮助你:)