2017-02-13 218 views
0

我有一个具有日期格式为dd-MMM-yyyy hh:mm的列的火花数据帧。2特定时间范围之间的Spark DataFrame查询

怎么办TIMERANGE查询像 -

找到2日期间和 下午4点至凌晨1点的特定时间范围内的所有行。

这是SQL可以通过使用DATEPART Specific Time Range Query in SQL Server

如何做星火数据帧相同。

例如,

我想找到所有的23-MAR-2016之间的行,直到25-MAR-2016, 时间范围内13:00:00至18:00:00仅限

所以我必须得到只有一行作为结果。

var input = spark.createDataFrame(Seq(
     (13L, "Abhi c", "22-MAR-2016 09:10:12"), 
     (11L, "VF", "23-MAR-2016 16:24:25"), 
     (12L, "Alice Jones", "24-MAR-2016 19:20:25") 
     )).toDF("id", "name", "time") 

input.filter("time between '23-MAR-2016' and '25-MAR-2016'").show() 

+---+-----------+--------------------+ 
| id|  name|    time| 
+---+-----------+--------------------+ 
| 11|   VF|23-MAR-2016 16:24:25| 
| 12|Alice Jones|24-MAR-2016 19:20:25| 
+---+-----------+--------------------+ 

我上面的查询只是过滤日期,甚至我可以给时间,但如何获得在每一天的时间范围内的行。

回答

1

你可以做这样的事情:

import org.apache.spark.sql.functions.unix_timestamp 

var input = spark.createDataFrame(Seq(
    (13L, "Abhi c", "22-MAR-2016 09:10:12"), 
    (11L, "VF", "23-MAR-2016 16:24:25"), 
    (12L, "Alice Jones", "24-MAR-2016 19:20:25") 
    )).toDF("id", "name", "time") 

val h = hour(unix_timestamp($"time", "dd-MMM-yyyy hh:mm:ss").cast("timestamp")) 

input.withColumn("hour", h).filter("time BETWEEN '23-MAR-2016' AND '25-MAR-2016' AND hour BETWEEN 13 AND 18").show() 

+---+----+--------------------+----+ 
| id|name|    time|hour| 
+---+----+--------------------+----+ 
| 11| VF|23-MAR-2016 16:24:25| 16| 
+---+----+--------------------+----+ 
0

可以使用的情况下,下,如果你不希望任何新的中间柱添加到您的数据帧。

import org.apache.spark.sql.functions._ 

var input = spark.createDataFrame(Seq((13L, "Abhi c", "22-MAR-2016 09:10:12"), (11L, "VF", "23-MAR-2016 16:24:25"), (12L, "Alice Jones", "24-MAR-2016 19:20:25"))).toDF("id", "name", "time") 

val ts = unix_timestamp($"time", "dd-MMM-yyyy HH:mm:ss").cast("timestamp") 

input.filter("time between '23-MAR-2016' and '25-MAR-2016'").filter(hour(ts) >= 13 && hour(ts) <= 18).show 

输出:

+---+----+--------------------+ 
| id|name|    time| 
+---+----+--------------------+ 
| 11| VF|23-MAR-2016 16:24:25| 
+---+----+--------------------+