2017-02-13 216 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| 
+---+----+--------------------+