在Java Spark中将字符串强制转换为TimeStampType

在Java Spark中将字符串强制转换为TimeStampType,java,apache-spark,apache-spark-sql,Java,Apache Spark,Apache Spark Sql,我有一个数据框,其中一列通过函数date\u格式更改为string lrPredictions.filter("label > 0").selectExpr("item_id", "horizon_minutes", "date_format(date_time, '1970-01-01 HH:mm:ss')" +

我有一个数据框,其中一列通过函数date\u格式更改为string

lrPredictions.filter("label > 0").selectExpr("item_id", 
                                           "horizon_minutes", 
                                           "date_format(date_time, '1970-01-01 HH:mm:ss')" +  " AS datetime_from",
                                           "abs(prediction - label) AS error_abs_sum", // these are all the error_abs_sum, error_squ_sum and so on...
                                           "power(prediction - label,2) AS error_squ_sum", 
                                           "100 * abs(prediction - label) /  label AS error_per_sum", 
                                           "abs(last_value - label) AS delta_sum")
但是,我希望将同一列返回到TimestampType,因为我需要在数据库中转储带有日期列的数据帧


我该怎么做?。我没有在java中找到任何函数或示例

您可以尝试这样的方法(代码在scala中,但在这种情况下应该无关紧要):


根据日期的可用格式,您可以使用下面的格式,并指定提供字符串以获取时间戳的格式

注意,我已经从Spark导入了类型。这段代码在Scala中,但Java代码应该类似

import org.apache.spark.sql.types._
val df = sc.parallelize(List("2018-08-11 11:44:50", "2019-09-11 11:20:00")).toDF
import org.apache.spark.sql.functions._
val df2 = df.select(unix_timestamp(col("value"))cast(TimestampType))
若您查看df2的模式,它将是时间戳类型

root
 |-- CAST(unix_timestamp(value, yyyy-MM-dd HH:mm:ss) AS TIMESTAMP): timestamp (nullable = true)

这最终解决了问题。完整说明,假设您的列名为datetime_from is:predictionsToDump.withColumn(“datetime_from”),predictionsToDump.col(“datetime_from”).cast(数据类型.TimestampType))
root
 |-- CAST(unix_timestamp(value, yyyy-MM-dd HH:mm:ss) AS TIMESTAMP): timestamp (nullable = true)