如何在SparkSQL中获取星期几?

Wen*_*iao 15 apache-spark

我试图通过SparkSQL选择周日记录的所有记录.我有以下尝试,但徒劳无功.

SELECT * FROM mytable WHERE DATEPART(WEEKDAY, create_time) = 0
SELECT * FROM mytable WHERE strftime("%w", create_time) = 0
Run Code Online (Sandbox Code Playgroud)

如何在SparkSQL中获取星期几?

小智 25

SPARK 1.5.0具有date_format接受格式作为参数的功能.此格式从时间戳返回一周工作日的名称:

select date_format(my_timestamp, 'EEEE') from ....

结果:例如'星期二'

  • 目前尚不清楚这是否回答了问题,因为问题想要选择一周中特定日期的记录,而不是将结果格式化为一周中的某一天.可以在`WHERE`子句中使用`date_format`吗?如果是这样,请修改您的答案以证明这一点. (2认同)

MrC*_*ine 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"
Run Code Online (Sandbox Code Playgroud)

如果您指定"EEEE",则完全拼写星期几.您可以使用"E"指定缩短版本,例如Wed.你可以在这里找到更多信息:http : //spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.DataFrame http://docs.oracle.com/javase/6/文档/ API/JAVA /文本/ SimpleDateFormat.html


Pow*_*ers 7

下面的示例显示了不同选项的输出。假设你有这个 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|
+----------+
Run Code Online (Sandbox Code Playgroud)

dayofweek以下是使用、date_formatdayOfWeekStr(来自Spark-daria )函数的结果。

+----------+
| some_date|
+----------+
|2021-01-10|
|2021-01-11|
|2021-01-12|
|2021-01-13|
|2021-01-14|
|2021-01-15|
|2021-01-16|
|      null|
+----------+
Run Code Online (Sandbox Code Playgroud)
+----------+---------+-----------+------------+
| 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|
+----------+---------+-----------+------------+
Run Code Online (Sandbox Code Playgroud)

输出daysofweek最适合使用date_addor进行日期添加,如本文date_sub所述。

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

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