在snowflake中,我可以很好地运行以下查询:
select business_month
from table1
where business_month between TO_VARCHAR(ADD_MONTHS(TO_DATE('202308', 'YYYYMM'),6), 'YYYYMM')
and TO_VARCHAR(ADD_MONTHS(TO_DATE('202406', 'YYYYMM'),12), 'YYYYMM');
当我在spark中运行它时,我得到这个错误:
pyspark.sql.utils.AnalysisException: u"Undefined function: 'TO_VARCHAR'. This function is neither a registered temporary function nor a permanent function registered in the database 'default'.; line 193 pos 23"
下面是我的代码:
DF = spark.sql ("""
select business_month
from table1
where business_month between TO_VARCHAR(ADD_MONTHS(TO_DATE('202308', 'YYYYMM'),6), 'YYYYMM')
and TO_VARCHAR(ADD_MONTHS(TO_DATE('202406', 'YYYYMM'),12), 'YYYYMM'
""");
DF.createOrReplaceTempView('TEST_TABLE')
我假设Spark没有内置这个功能。有没有办法复制这个逻辑,使它与Spark兼容?
1条答案
按热度按时间rta7y2nd1#
您可以使用
CAST
而不是TO_VARCHAR
(我还认为TO_DATE
可能需要更改为DATEADD
,而且我认为YYYYMM
在SQL中不受支持,但YYYYMMDD
是受支持的,因此我们必须硬编码日期,我选择了每月的第一天)。