我有一个火花数据和一个列的日期格式dd-MMM-yyyy :mm。
如何进行TimeRange查询,如-
查找两个日期之间的所有行,并在下午4时至凌晨1时的特定时间范围内查找。
这在sql中使用DatePart Server中的特定时间范围查询是可能的。
如何在中做同样的事情。
例如,
我想找到2016年3月23日至2016年3月25日至2016年3月25日至2016年3月间的所有行,时间范围为13:00至6: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|
+---+-----------+--------------------+上面的查询只过滤了日期,甚至可以给出时间,但是如何在每天的时间范围内获得行。
发布于 2017-02-13 11:21:23
你可以这样做:
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|
+---+----+--------------------+----+发布于 2020-05-12 12:56:59
有一个函数可以检索时间戳的时间。下面是如何选择PySpark中上午10点到下午1点之间的数据
from pyspark.sql.functions import hour
data.select("ts").where((hour("ts") > 10) & (hour("ts") < 13))您可以使用例如pyspark.sql.functions.month、pyspark.sql.functions.year或pyspark.sql.functions.dayofmonth来进一步过滤
发布于 2017-02-13 11:54:53
如果您不想将任何新的中间列()添加到dataframe中,则可以使用以下方法来防止。
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|
+---+----+--------------------+https://stackoverflow.com/questions/42201822
复制相似问题