scala - 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 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"))
推荐阅读
- postgresql - 在 postgres 中估计一个 SQL 请求的结果大小
- python - 操纵数据框以创建数据透视表
- qt - QSplitter 似乎反转索引内容小部件
- amazon-web-services - 我如何从前端获取输入字符串?
- git - 使用启动脚本从 Gitlab 存储库部署服务时出现问题
- android - 用于 EditText 的具有数字和基本数学运算的键盘
- c# - StackExchange.Redis 使用哈希真的很慢 = C# ASP.NET Core 3.0 和 Docker
- dynamics-crm - Dynamics 365 中的解决方案检查器
- ionic4 - 打字稿问题 this.ref.push() 不起作用
- php - 如何在 LinkedIn 等 WoWonder Feed 中的个人资料名称下显示自定义字段?