【发布时间】:2020-10-14 09:27:33
【问题描述】:
编辑:显然 Spark 2.4.3 不支持 INTERVAL。我暂时无法升级到 Spark 3.0.0(管理员策略)。我想知道目前是否有针对 INTERVAL 的解决方法或交替方法?谢谢
在 Databricks 中对 Spark sql 运行查询,查询在间隔行上显示错误。我试图在同一个用户 ID 上自行左加入表,并且用户数相差一个月。
Error in SQL statement: ParseException:
Literals of type 'INTERVAL' are currently not supported.
Spark SQL 不支持区间函数吗?
这是我的尝试:
%sql
;WITH act_months AS (
SELECT DISTINCT
DATE_TRUNC('month', data_date) ::DATE AS act_month,
user_id
FROM user_sessions)
SELECT
prev.act_month,
prev.user_id,
curr.user_id IS NULL AS churned_next_month
FROM act_months AS prev
LEFT JOIN act_months AS curr
ON prev.user_id = curr.user_id
AND prev.act_month = (curr.act_month - INTERVAL '1 MONTH')
ORDER BY prev.act_month ASC, prev.user_id ASC;
这是我的数据结构
+----------+----------+
| data_date| user_id|
+----------+----------+
|2020-01-01|22600560aa|
|2020-01-01|17148900ab|
|2020-01-01|21900230aa|
|2020-01-01|35900050ac|
|2020-01-01|22300280ad|
|2020-01-02|19702160ac|
|2020-02-02|17900020aa|
|2020-02-02|16900120aa|
|2020-02-02|11160900aa|
|2020-03-02|16900290aa|
+----------+----------+
【问题讨论】:
-
您运行的是什么版本的 Spark?您是否启用了 ANSI 合规模式?
-
Spark 确实支持
INTERVAL,但您需要运行 3.0.0 或更高版本,并在 ISO SQL-2011 的 ANSI 兼容模式下运行。 -
运行 Spark 2.4.3
-
那么你需要升级到 Spark 3.0.0 以获得
INTERVAL的支持。 -
抱歉,我指的是
ADD_MONTHS,而不是DATEDIFF。
标签: apache-spark apache-spark-sql databricks