Apache spark spark sql中提取的解析器异常

Apache spark spark sql中提取的解析器异常,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我正在尝试使用spark sql中的extract从日期提取年份部分 spark.sql("select extract(year from datecol) as dt from temp").show(false) 我对这件事感到不满 org.apache.spark.sql.catalyst.parser.ParseException:missing ')' at 'from'(line 1, pos 20) 您可以使用year函数从日期

我正在尝试使用spark sql中的extract从日期提取年份部分

     spark.sql("select extract(year from datecol) as dt from temp").show(false)
我对这件事感到不满

    org.apache.spark.sql.catalyst.parser.ParseException:missing ')' at 'from'(line 1, pos 20)
    

您可以使用year函数从日期提取年份。 例如,如果您的日期格式为21-04-17:

df1.withColumn("year", year(to_timestamp($"datecol", "yy-MM-dd")))
extract(从源文件中提取字段)-提取日期/时间戳或时间间隔源文件的一部分

此功能可用spark版本
3.0.0
&spark的较低版本它不可用,因此如果使用
提取
功能,将出现以下异常

scala> spark.sql("select extract(year from datecol) as dt from tmp").show(false)
org.apache.spark.sql.catalyst.parser.ParseException:
mismatched input 'from' expecting {')', ','}(line 1, pos 20)

== SQL ==
select extract(year from datecol) as dt from temp
--------------------^^^

  at org.apache.spark.sql.catalyst.parser.ParseException.withCommand(ParseDriver.scala:217)
  at org.apache.spark.sql.catalyst.parser.AbstractSqlParser.parse(ParseDriver.scala:114)
  at org.apache.spark.sql.execution.SparkSqlParser.parse(SparkSqlParser.scala:48)
  at org.apache.spark.sql.catalyst.parser.AbstractSqlParser.parsePlan(ParseDriver.scala:68)
  at org.apache.spark.sql.SparkSession.sql(SparkSession.scala:623)
  ... 50 elided
spark.sql("select year(datecol) as dt from tmp").show(false)
使用
year
功能

scala> spark.sql("select extract(year from datecol) as dt from tmp").show(false)
org.apache.spark.sql.catalyst.parser.ParseException:
mismatched input 'from' expecting {')', ','}(line 1, pos 20)

== SQL ==
select extract(year from datecol) as dt from temp
--------------------^^^

  at org.apache.spark.sql.catalyst.parser.ParseException.withCommand(ParseDriver.scala:217)
  at org.apache.spark.sql.catalyst.parser.AbstractSqlParser.parse(ParseDriver.scala:114)
  at org.apache.spark.sql.execution.SparkSqlParser.parse(SparkSqlParser.scala:48)
  at org.apache.spark.sql.catalyst.parser.AbstractSqlParser.parsePlan(ParseDriver.scala:68)
  at org.apache.spark.sql.SparkSession.sql(SparkSession.scala:623)
  ... 50 elided
spark.sql("select year(datecol) as dt from tmp").show(false)

只需使用
选择年份(datecol)作为dt
您使用哪个Spark版本?