首页 > 解决方案 > date_trunc 函数在添加新列时不适用于 spark 数据框

问题描述

我想在date_trunc具有日期列的数据框上使用该函数,以便我可以创建新列,该列将为我提供有关记录与哪个季度相关联的信息。

我尝试过的东西如下:

import org.apache.spark.sql.functions._
val test = Seq(("2010-03-05"),("2018-01-16"),("2018-04-20")).toDF("TestDates")
display(test)  //this displays the date in the notebook

val datetrunctest = test.withColumn("Quarter", date_trunc("QUARTER",$"TestDates"))
display(datetrunctest)  //this gives me an error saying **error: not found: value date_trunc**

此外,当我尝试使用带有函数名称的 import 语句时,它会给我如下错误:

import org.apache.spark.sql.functions.date_trunc
Error : value date_trunc is not a member of object org.apache.spark.sql.functions

通过将上述数据帧测试保存为表“DailyDates”,我可以在 spark sql 中使用相同的函数,如下所示:

val ddd = spark.sql("Select TestDates,date_trunc('QUARTER', TestDates) as QuarterDate from test.DailyDates")
display(ddd)

我有很多需要在数据帧上执行的转换/聚合,所以我正在寻找一种方法,通过添加额外的列,我可以在数据帧上完成这项工作。根据文档,如果您使用的 spark 版本大于 2.3.0 这应该可以工作,我使用的是 spark 版本 2.4.3 。

spark版本的快照图像: 在此处输入图像描述

文档链接:https ://spark.apache.org/docs/2.3.0/api/java/org/apache/spark/sql/functions.html#date_trunc-java.lang.String-org.apache.spark.sql 。柱子-

有没有人知道可能是什么问题以及我如何才能让它发挥作用?

标签: scalaapache-sparkapache-spark-sql

解决方案


检查您使用的火花版本,

打开 Spark shell 终端并输入命令

sc.version Or spark-submit --version

确保导入函数

import org.apache.spark.sql.functions._

接着

该函数要求参数为 Column

public static Column quarter(Column e)
import org.apache.spark.sql.functions._
val test = Seq(("2010-03-05"),("2018-01-16"),("2018-04-20")).toDF("TestDates")
val datetrunctest = test.withColumn("Quarter", quarter($"TestDates"))

推荐阅读