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. mysql之binlog和各类日志介绍

    1.错误日志 错误日志作用: 记录MySQL的启动.停止信息以及在MySQL运行过程中的错误信息. 参数log_error(默认开启)  修改后重启生效 log_error=[path/[file_n ...

  2. 贼厉害,手撸的 SpringBoot 缓存系统,性能杠杠的!

    一.通用缓存接口 二.本地缓存 三.分布式缓存 四.缓存"及时"过期问题 五.二级缓存 缓存是最直接有效提升系统性能的手段之一.个人认为用好用对缓存是优秀程序员的必备基本素质. 本 ...

  3. SpringIOC的高级特性

    目录 1. lazy-Init延迟加载 1.1 XML方式开启延迟加载: 1.2 注解开启延迟加载: 1.3全局配置--default-lazy-init="": 应用场景: 2. ...

  4. 怎么用在线思维导图Ayoa规划个人任务

    在Ayoa的任务板功能中可以对某一任务进行详细设置,例如改变紧急情况/重要程度.添加到我的计划工具.设置开始日期.截止日期等. 图1:任务详情设置 而这里的"我的计划工具"就是一个 ...

  5. 如何输入x的平方

    随着电脑的普及,现在都流行在电脑上做教学课件,撰写文章,尤其是理科文献,涉及的数学符号有很多,它包括了我们常见的四则运算符号和平方.立方等,也包括了高等数学中用到的积分.极限符号等,打这些公式就需要用 ...

  6. Vegas视频FX功能详解

    今天呢,小编就带大家走进Vegas(Win系统)视频FX的世界.那么什么是视频FX呢,就是视频制作软件Vegas中自带添加特效的地方,它可以用于添加模糊,黑白,镜像等滤镜效果,各种高大上的视频大片都需 ...

  7. CorelDRAW不同选择工具的作用及用法汇总

    在CorelDRAW中,"选择工具"是我们的好助手之一."选择工具"图标位于CDR界面左边的工具箱中.使用鼠标单击图标右下角的小三角,我们可以看到"选 ...

  8. selenium WebDriver提示Unable to find a matching set of capabilities解决方法

    问题出在:应该将火狐浏览器驱动添加到火狐浏览器安装目录下,并且将火狐浏览器安装目录放在path下面.(出现大意,忘了在火狐浏览器下放其对应的驱动) 亲测以下组合方式可用:   pycharm-comm ...

  9. Javascript严格模式与一般模式的区别

    严格模式是指使代码在严格条件下运行.如果你在JavaScript脚本的头部看到"use strict",那么就表明当前处于严格模式下.严格模式主要是为了消除JavaScript语法 ...

  10. Java基础教程——线程同步

    线程同步 synchronized:同步的 例:取钱 不做线程同步的场合,假设骗子和户主同时取钱,可能出现这种情况: [骗子]取款2000:账户余额1000 [户主]取款2000:账户余额1000 结 ...