【发布时间】: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