我试图通过SparkSQL选择星期日录制的所有记录。 我有以下尝试,但徒劳无功。
SELECT * FROM mytable WHERE DATEPART(WEEKDAY, create_time) = 0
SELECT * FROM mytable WHERE strftime("%w", create_time) = 0
如何在SparkSQL中获取星期几?
答案 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|
+----------+
以下是使用 dayofweek
、date_format
和 dayOfWeekStr
(来自 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_add
或 date_sub
的日期相加,如 this post 中所述。
date_format
解决方案最适合自定义给定格式的日期(例如,用于人类可读的交付物)。
某些日期函数,例如 next_day
将字符串形式的一天作为参数,这就是 dayOfWeekStr
派上用场的时候。