【问题标题】:Convert value string to Date, Scala Spark将值字符串转换为日期,Scala Spark
【发布时间】:2021-03-24 22:56:08
【问题描述】:

我正在使用最大聚合从 DF 中获取一个值,因此 我得到了一个字符串,我想将其转换为日期。 我正在做的是这样的:

var date = spark.read.parquet("data/users").select("Date").agg(max(col("Date"))).first.get(0).toString
df2 = table_read.filter("Date=" + lastDate)

这样我得到了一个字符串类型的变量,现在我想将它转换为日期类型。我一直在寻找在另一个答案中执行此操作,但我所看到的只是使用 DataFrames 并使用 to_date。这种情况下我该怎么办?

编辑

架构

root
 |-- Date: date (nullable = false)
 |-- op: string (nullable = true)
 |-- value: string (nullable = true)
spark.read.parquet("data/users").select("Date").agg(max(col("Date"))).show

输出

+-----------+
|max(Date)  |
+-----------+
|2019-11-10 |
+-----------+

错误:

Exception message: cannot resolve '(`Date` = ((2021 - 12) - 14))' due to data type mismatch: differing types in '(`Date` = ((2021 - 12) - 14))' (date and int).; line 1 pos 0;

'Filter (Date#5488 = ((2021 - 12) - 14))

【问题讨论】:

  • 首先检查删除“toString”后得到的结果。否则,您可能需要一个日期格式化程序。我相信 spark 标准库会对此提供支持。尝试编写 DateTimeFormatter 并查看它是否允许您导入它
  • 如果我删除 toString,我会得到这个 var 日期的 Any 类型。我可以使用 DataTimeFormatter 来执行此操作吗?
  • 你可以使用 DateTimeFormatter 是的。但如果 mck 是正确的,您应该可以使用 .getDate。我不确定你是否可以。所以试试吧! :)

标签: scala apache-spark apache-spark-sql


【解决方案1】:

您可以使用.getDate,例如

var date = spark.read.parquet("data/users").select("Date").agg(max(col("Date"))).first.getDate(0)

要在过滤器中使用它,您可以这样做

df2 = table_read.filter(col("Date") === lastDate)
// or df2 = table_read.filter("date='" + date + "'")

【讨论】:

  • 你可以在约会时使用 Max 吗?如果您尝试进行尝试完成的整个聚合,可能会有所帮助。但我认为它看起来不错
  • 嗨,麦克!使用第一个选项,我得到“由于数据类型不匹配导致的错误:'(date = (2019 - 11) - 14))'(日期和整数)中的不同类型而第二个选项我不明白,因为当我读我得到一个变量不是 DF
  • 通常认为 max/min 适用于数字而不适用于日期。但也许它支持它。
  • 已编辑,我将获取该值后所做的操作放入使用过滤器读取另一个表的代码中。
  • 啊,所以.getDate(0)不会报错,但是放到filter里面就报错了?
猜你喜欢
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-27
  • 2011-11-28
相关资源
最近更新 更多