Spark3.0使用的是预公历,而之前都是儒略历和公历的混合(即1582年之前的日期使用儒略历,1582年之后使用公历,java.sql.Date这个API用的就是这种,而Java8里使用java.time.LocalDate代替,使用的就是Spark3.0目前的预公历),Date类型不考虑时区

Spark3.0移植了Java8中的时间戳,将更加精确


构造日期和时间戳

1、构造日期

  •   make_date(),spark3.0中该函数有三个参数:YEAR,MONTH,DAY,输入参数均被隐式转换为int类型,该函数会根据预公历检查形成的日期是否是有效日期,无效则返回NULL。
  • >>> spark.createDataFrame([(2020, 6, 26), (1000, 2, 29), (-44, 1, 1)],
    ... ['Y', 'M', 'D']).createTempView('YMD')
    >>> df = sql('select make_date(Y, M, D) as date from YMD')
    >>> df.printSchema()
    root
    |-- date: date (nullable = true)
    >>> df.show()
    +-----------+
    | date|
    +-----------+
    | 2020-06-26|
    | null|
    |-0044-01-01|
    +-----------+

2、构造时间戳

  •   make_timestamp(),  spark3.0中共有6个参数,YEAR,MONTH,DAY,HOUR,MINUTE,SECOND,其中second为decimal类型,因为时间戳中的秒可以以微秒形式传递,提高精度
  • >>> df = spark.createDataFrame([(2020, 6, 28, 10, 31, 30.123456),
    ... (1582, 10, 10, 0, 1, 2.0001), (2019, 2, 29, 9, 29, 1.0)],
    ... ['YEAR', 'MONTH', 'DAY', 'HOUR', 'MINUTE', 'SECOND'])
    >>> df.show()
    +----+-----+---+----+------+---------+
    |YEAR|MONTH|DAY|HOUR|MINUTE| SECOND|
    +----+-----+---+----+------+---------+
    |2020| 6| 28| 10| 31|30.123456|
    |1582| 10| 10| 0| 1| 2.0001|
    |2019| 2| 29| 9| 29| 1.0|
    +----+-----+---+----+------+---------+ >>> ts = df.selectExpr("make_timestamp(YEAR, MONTH, DAY, HOUR, MINUTE, SECOND) as MAKE_TIMESTAMP")
    >>> ts.printSchema()
    root
    |-- MAKE_TIMESTAMP: timestamp (nullable = true)
    >>> ts.show(truncate=False)
    +--------------------------+
    |MAKE_TIMESTAMP |
    +--------------------------+
    |2020-06-28 10:31:30.123456|
    |1582-10-10 00:01:02.0001 |
    |null |
    +--------------------------+
    //转换时区只需要再加一个参数,如下
    >>> df = spark.createDataFrame([(2020, 6, 28, 10, 31, 30, 'UTC'),
    ... (1582, 10, 10, 0, 1, 2, 'America/Los_Angeles'),
    ... (2019, 2, 28, 9, 29, 1, 'Europe/Moscow')],
    ... ['YEAR', 'MONTH', 'DAY', 'HOUR', 'MINUTE', 'SECOND', 'TZ'])
    >>> df = df.selectExpr('make_timestamp(YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, TZ) as MAKE_TIMESTAMP')
    >>> df = df.selectExpr("date_format(MAKE_TIMESTAMP, 'yyyy-MM-dd HH:mm:SS VV') AS TIMESTAMP_STRING")
    >>> df.show(truncate=False)
    +---------------------------------+
    |TIMESTAMP_STRING |
    +---------------------------------+
    |2020-06-28 13:31:00 Europe/Moscow|
    |1582-10-10 10:24:00 Europe/Moscow|
    |2019-02-28 09:29:00 Europe/Moscow|
    +---------------------------------+

Spark3.0中Dates和Timestamps的更多相关文章

  1. spark-3.0 application 调度算法解析

    spark 各个版本的application 调度算法还是有这明显的不同之处的.从spark1.3.0 到 spark 1.6.1.spark2.0 到 现在最新的spark 3.0 ,调度算法有了一 ...

  2. Spark3.0.1各种集群模式搭建

    对于spark前来围观的小伙伴应该都有所了解,也是现在比较流行的计算框架,基本上是有点规模的公司标配,所以如果有时间也可以补一下短板. 简单来说Spark作为准实时大数据计算引擎,Spark的运行需要 ...

  3. Spark(一)【spark-3.0安装和入门】

    目录 一.Windows安装 1.安装 2.使用 二.Linux安装 Local模式 1.安装 2.使用 yarn模式 1.安装 2.使用 3.spark的历史服务器集成yarn 一.Windows安 ...

  4. [译] C# 5.0 中的 Async 和 Await (整理中...)

    C# 5.0 中的 Async 和 Await [博主]反骨仔 [本文]http://www.cnblogs.com/liqingwen/p/6069062.html 伴随着 .NET 4.5 和 V ...

  5. Spring.Net在Mvc4.0中应用的说明

    案例Demo:http://yunpan.cn/cJ5aZrm7Uybi3 访问密码 414b Spring.Net在Mvc4.0中应用的说明 1.引用dll 2.修改Global文件 (Spring ...

  6. WCF学习之旅—WCF4.0中的简化配置功能(十五)

    六 WCF4.0中的简化配置功能 WCF4.0为了简化服务配置,提供了默认的终结点.绑定和服务行为.也就是说,在开发WCF服务程序的时候,即使我们不提供显示的 服务终结点,WCF框架也能为我们的服务提 ...

  7. 看看C# 6.0中那些语法糖都干了些什么(终结篇)

    终于写到终结篇了,整个人像在梦游一样,说完这一篇我得继续写我的js系列啦. 一:带索引的对象初始化器 还是按照江湖老规矩,先扒开看看到底是个什么玩意. 1 static void Main(strin ...

  8. 看看C# 6.0中那些语法糖都干了些什么(中篇)

    接着上篇继续扯,其实语法糖也不是什么坏事,第一个就是吃不吃随你,第二个就是最好要知道这些糖在底层都做了些什么,不过有一点 叫眼见为实,这样才能安心的使用,一口气上五楼,不费劲. 一:字符串嵌入值 我想 ...

  9. FineUI(开源版)v6.0中FState服务器端验证的实现原理

    前言 1. FineUI(开源版)是完整开源,最早发起于 2008-04,下载全部源代码:http://fineui.codeplex.com/ 2. 你可以通过捐赠作者来支持FineUI(开源版)的 ...

随机推荐

  1. python爬虫分析报告

    在python课上布置的作业,第一次进行爬虫,走了很多弯路,也学习到了很多知识,借此记录. 1. 获取学堂在线合作院校页面 要求: 爬取学堂在线的计算机类课程页面内容. 要求将课程名称.老师.所属学校 ...

  2. NProgress使用教程

    GitHub地址 rstacruz/nprogress: For slim progress bars like on YouTube, Medium, etc (github.com) 演示网站 N ...

  3. PL/SQL Developer 13注册码(亲测可用)

    product code: 4vkjwhfeh3ufnqnmpr9brvcuyujrx3n3le serial Number: 226959 password: xs374ca

  4. 网络拓扑实例之VRRP负载分担(四)

    组网图形  VRRP负载分担简介 负载分担方式是指多台设备同时承担业务,因此负载分担方式需要两个或者两个以上的虚拟路由器,每个虚拟路由器都包括一个Master路由器和若干个Backup路由器,各虚拟路 ...

  5. Hash算法——加密解密说明

    MD5 pmd5-md5加密解密 加密类型识别工具 hash-identifier

  6. 02python开发之基本运算符

    02 python开发之基本运算符 目录 02 python开发之基本运算符 2 基本运算符 2.1 算数运算符 2.1.1 种类 2.1.2 用法 2.2 比较运算符 2.2.1 种类 2.2.2 ...

  7. 在线思维导图Ayoa共享功能使用教程

    Ayoa是一个制作思维导图的软件,除了导图制作,小编在使用过程中还发现了一些令人惊喜的功能,这些功能使得Ayoa有了更大的亮点以吸引用户. 下面就为大家简单介绍几个小编认为Ayoa中较为实用的共享功能 ...

  8. 鸿蒙OS的系统调用是如何实现的? | 解读鸿蒙源码

    本文将首先带您回顾"系统调用"的概念以及它的作用,然后从经典的Hello World开始,逐行代码层层分析--鸿蒙OS的系统调用是如何实现的. 写在前面 9月10号 华为开发者大会 ...

  9. Anno微服务引擎与传统应用相融合

    1.Anno是什么? Anno是一个微服务引擎.在此之前我们通过 Viper项目对Anno有一个基本的认识,并且Viper也受到的很多朋友的喜欢,截止发稿前Viper在GitHub收获了300多个星. ...

  10. Java基础教程——Math类

    Math Java这种级别的编程语言怎么可能没有数学相关的操作呢? java.lang.Math类提供了基本数学运算的方法. 该类是final的,说明不能被继承. 该类的构造方法是私有的(privat ...