如何在SparkSQL中获取星期几?

时间:2014-07-29 00:46:48

标签: apache-spark

我试图通过SparkSQL选择星期日录制的所有记录。 我有以下尝试,但徒劳无功。

SELECT * FROM mytable WHERE DATEPART(WEEKDAY, create_time) = 0
SELECT * FROM mytable WHERE strftime("%w", create_time) = 0

如何在SparkSQL中获取星期几?

4 个答案:

答案 0 :(得分:23)

SPARK 1.5.0有一个.ConfigureAwait(false)函数,它接受一种格式作为参数。此格式从时间戳返回一周工作日的名称:

date_format

结果:例如'星期二'

答案 1 :(得分:8)

如果create_time的格式为UTC,则可以使用以下内容过滤掉SparkSQL中的特定日期。我使用Spark 1.6.1:

select id,  date_format(from_unixtime(created_utc), 'EEEE') from testTable where date_format(from_unixtime(created_utc), 'EEEE') == "Wednesday"

如果您指定“EEEE'”,则完整地列出星期几。你可以使用' E'指定缩短版本,例如星期三。 你可以在这里找到更多信息: http://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.DataFrame http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

答案 2 :(得分:3)

这对我有用:

spark.sql("select dayofweek(time) as dow from some_table")

time必须为日期格式

答案 3 :(得分:1)

以下示例显示了不同选项的输出。假设你有这个 DataFrame。

+----------+
| some_date|
+----------+
|2021-01-10|
|2021-01-11|
|2021-01-12|
|2021-01-13|
|2021-01-14|
|2021-01-15|
|2021-01-16|
|      null|
+----------+

以下是使用 dayofweekdate_formatdayOfWeekStr(来自 spark-daria)函数的结果。

import com.github.mrpowers.spark.daria.sql.functions._

df
  .withColumn("dayofweek", dayofweek(col("some_date")))
  .withColumn("date_format", date_format(col("some_date"), "EEEE"))
  .withColumn("dayOfWeekStr", dayOfWeekStr(col("dayofweek")))
  .show()
+----------+---------+-----------+------------+
| some_date|dayofweek|date_format|dayOfWeekStr|
+----------+---------+-----------+------------+
|2021-01-10|        1|     Sunday|         Sun|
|2021-01-11|        2|     Monday|         Mon|
|2021-01-12|        3|    Tuesday|         Tue|
|2021-01-13|        4|  Wednesday|         Wed|
|2021-01-14|        5|   Thursday|         Thu|
|2021-01-15|        6|     Friday|         Fri|
|2021-01-16|        7|   Saturday|         Sat|
|      null|     null|       null|        null|
+----------+---------+-----------+------------+

daysofweek 输出最适合与 date_adddate_sub 的日期相加,如 this post 中所述。

date_format 解决方案最适合自定义给定格式的日期(例如,用于人类可读的交付物)。

某些日期函数,例如 next_day 将字符串形式的一天作为参数,这就是 dayOfWeekStr 派上用场的时候。