scala - 如何解析日期时间?

标签 scala apache-spark apache-spark-sql

我正在尝试解析当前类型为字符串的日期列。格式为

2005-04-24T09:12:49Z

我有 Spark 2.1 版。我已经尝试了以下

spark.sql("SELECT TO_DATE(Date) FROM df").show()

返回 2005-04-24 但没有时间戳。

接下来我尝试了

val ts = unix_timestamp($"Date", "yyyy-dd-MM HH:mm:ss").cast("timestamp")
df.withColumn("Date", ts).show()

这返回了所有空值

然后我试了一下

spark.sql("select TO_DATE(Date_Resulted, 'yyyy-MM-ddTHH:mm:ssZ') AS date from lab").show()

但这只是返回错误:

org.apache.spark.sql.AnalysisException: Invalid number of arguments for function to_date; line 1 pos 7

必须有一种简单的方法来解析此字符串日期列以返回类型 DateTime。任何帮助将不胜感激

最佳答案

在 Spark 中有多种获取日期时间的方法。

让我们使用以下示例数据:

val df=Seq("2005-04-24T09:12:49Z").toDF("time_stamp")
df.createOrReplaceTempView("tmp")

时间戳中的日期

//in spark sql api
spark.sql("select to_date(time_stamp)dt from tmp").show()

//in dataframe api
df.withColumn("dt",to_date('time_stamp)).select("dt").show()

Result:
//+----------+
//|        dt|
//+----------+
//|2005-04-24|
//+----------+

从时间戳获取日期时间 - 使用 from_unixtime 和 unix_timestamp 函数

//in spark sql api
spark.sql("""select timestamp(from_unixtime(unix_timestamp(time_stamp,"yyyy-MM-dd'T'hh:mm:ss'Z'"),"yyyy-MM-dd hh:mm:ss")) as ts from tmp""").show()

//in dataframe api
df.withColumn("dt",from_unixtime(unix_timestamp('time_stamp,"yyyy-MM-dd'T'hh:mm:ss'Z'"),"yyyy-MM-dd hh:mm:ss").cast("timestamp")).select("dt").show()

// Result:
// +-------------------+
// |                 ts|
// +-------------------+
// |2005-04-24 09:12:49|
// +-------------------+

从时间戳获取日期时间 - 使用 unix_timestamp 函数

//in spark sql api    
spark.sql("""select timestamp(unix_timestamp(time_stamp,"yyyy-MM-dd'T'hh:mm:ss'Z'")) as ts from tmp""").show()

//in dataframe api
df.withColumn("dt",unix_timestamp('time_stamp,"yyyy-MM-dd'T'hh:mm:ss'Z'").cast("timestamp")).select("dt").show()

// Result:
// +-------------------+
// |                 ts|
// +-------------------+
// |2005-04-24 09:12:49|
// +-------------------+

从时间戳获取日期时间 - 使用 to_timestamp 函数

//in spark sql api
spark.sql("select to_timestamp(time_stamp)ts from tmp").show()

//in dataframe api
df.withColumn("dt",to_timestamp('time_stamp)).select("dt").show()

// Result:
// +-------------------+
// |                 ts|
// +-------------------+
// |2005-04-24 04:12:49|
// +-------------------+

从时间戳获取日期时间 - 使用指定格式的 to_timestamp 函数

//in spark sql api
spark.sql("""select to_timestamp(time_stamp,"yyyy-MM-dd'T'hh:mm:ss'Z'")ts from tmp""").show()

//in dataframe api
df.withColumn("dt",to_timestamp($"time_stamp","yyyy-MM-dd'T'hh:mm:ss'Z'")).select("dt").show()

// Result:
// +-------------------+
// |                 ts|
// +-------------------+
// |2005-04-24 09:12:49|
// +-------------------+

关于scala - 如何解析日期时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58034108/

相关文章:

pyspark - 使用 pyspark 连接 Microsoft SQL Server,抛出错误 :

scala - 根据spark数据帧scala中的列值过滤行

scala - 如何编写一个简单地进行行收集的 Spark UDAF?

Scala垃圾回收?

scala - 为什么最多 4 个元素的集合是有序的,而更大的元素则不是?

java - 将 JavaStreamingContext 从 INITIALIZED 切换到 ACTIVE

sql - 为什么 Spark SQL 认为索引的支持不重要?

json - Play Framework 2.1.1 Json 写入嵌套对象

scala - 如何计算代币?

scala - Apache Toree 和 Spark Scala 在 Jupyter 中不起作用