我试图通过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 ....
结果:例如'星期二'
如果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
下面的示例显示了不同选项的输出。假设你有这个 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_format和dayOfWeekStr(来自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派上用场了。
| 归档时间: |
|
| 查看次数: |
21596 次 |
| 最近记录: |