spark dataframe的时间类型和String类型转化 您所在的位置:网站首页 java中将日期转化为字符串的函数是什么 spark dataframe的时间类型和String类型转化

spark dataframe的时间类型和String类型转化

2024-07-14 19:36| 来源: 网络整理| 查看: 265

spark sql中的时间转换函数是调用Hive来进行操作,所以spark sql和hql的用法是一致的。 hive中的时间格式规定为:

默认格式是 yyyy-MM-dd HH:mm:ss

yyyy 年 可简化为yy MM 月 可简化为M dd 日 可简化为d

HH 小时 可简化为H mm 分钟 可简化为m ss 秒 可简化为s

其中,除了秒大小写 通用外, 其他计时单位 大小写不通用 如果写错 则输出 null。 本次介绍三个函数分别是: 1.to_date(列名, ‘yyyy/MM/dd HH:mm:ss’) 返回 Date类型

将string类型字段转化为date 标准格式为"yyyy-MM-dd"(spark的date格式精确到天)

其中"yyyy/MM/dd HH:mm:ss" 为列数据本身的格式 可以不符合常见的时间定义格式 如

注 : 无论你写不写 时分秒 格式,spark中的date格式 都精确到分钟 即 我的输入为 2020~10/10 10:10:10 经过to_date后 变成 2020-10-10 具体可参考下文中的例子 2.date_format(列名, ‘yyyy/MM/dd HH:mm:ss’) 返回String类型

将时间标准格式按照自定义输入格式进行转化。若包含 时分秒 则以0代替。

输入类型可以自己定义,如"yyyy=MM=dd HH/mm:ss"

3.to_timestamp(列名) 返回Timestamp类型

将标准时间格式(yyyy-MM-dd)数据(既可以是String类型,也可以是Date类型) 转化为标准时间戳类型:“yyyy-MM-dd HH-mm-ss” 没有时分秒 则自动补0

例:

import spark.implicits._ import org.apache.spark.sql.functions._ import org.apache.spark.sql.types._ import org.apache.spark.sql.DataFrame var data = Seq( ("0", "ming", "tj","2019~09-06 17:15:15", "2002"), ("0", "haha", "hegang","2019~09-08 15:15:15", "10010") ).toDF("label", "name", "live","START_TIME", "AMOUNT") data.show()

在这里插入图片描述

使用 to_date() 函数 data.createOrReplaceTempView("data") var colName = "START_TIME" var test1 = spark.sql(s"select to_date($colName, 'yyyy~MM-dd HH:mm:ss') as times from data") test1.show() var type_test1 = test1.dtypes type_test1.foreach(println)

在这里插入图片描述

to_date不仅能在sparksql中使用,也可以作为函数,如下所示: var test2 = data.withColumn(colName,(to_date(col(colName),"yyyy~MM-dd HH:mm:ss"))) test2.show() var type_test2 = test2.dtypes type_test2.foreach(println)

在这里插入图片描述

使用date_format() 函数 var test3 = spark.sql(s"select date_format(to_date($colName, 'yyyy~MM-dd HH:mm:ss'),'yyyy=MM=dd HH/mm:ss') as times from data") test3.show() var type_test3 = test3.dtypes type_test3.foreach(println)

在这里插入图片描述

date_format不仅能在sparksql中使用,也可以作为函数,如下所示: var test4 = data.withColumn(colName,(date_format(to_date(col(colName),"yyyy~MM-dd HH:mm:ss"), "yyyy/MM/dd HH:mm:ss"))) test4.show() var type_test4 = test4.dtypes type_test4.foreach(println)

在这里插入图片描述

使用to_timestamp() 函数

构建表data1, 时间格式为标准格式,类型为String:

在这里插入图片描述

data1.createOrReplaceTempView("data1") var colName = "START_TIME" var test5 = spark.sql(s"select to_timestamp(to_date($colName,'yyyy-MM-dd HH:mm:ss')) as times from data1") // 与上面运行结果一直 // var test5 = spark.sql(s"select to_timestamp($colName) as times from data1") // 将TimestampType 转为StringType // var test5 = spark.sql(s"select cast(to_timestamp($colName) as String) as times from data1") test5.show() var type_test5 = test5.dtypes type_test5.foreach(println)

在这里插入图片描述

to_timestamp不仅能在sparksql中使用,也可以作为函数,如下所示: // var test6 = data1.withColumn(colName,(to_timestamp(col(colName)))) // 将TimestampType 转为StringType var test6 = data1.withColumn(colName, col(colName).cast(StringType)) test6.show() var type_test6 = test6.dtypes type_test6.foreach(println)

在这里插入图片描述

参考资料:

1.https://www.cnblogs.com/mylittlecabin/p/11692363.html

2.https://stackoverflow.com/questions/40763796/convert-date-from-string-to-date-format-in-dataframes

3.https://www.nuomiphp.com/eplan/29850.html

4.https://stackoverflow.com/questions/40763796/convert-date-from-string-to-date-format-in-dataframes

5.https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-DateFunctions

6.https://www.jianshu.com/p/a87ac9f827e4

7.https://cloud.tencent.com/developer/ask/225235

8.https://blog.csdn.net/qq_33283716/article/details/81043264

在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有