Apache spark spark sql中提取的解析器异常
我正在尝试使用spark sql中的extract从日期提取年份部分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("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版本?