Spark SQL 支持多种数据类型,并兼容Python、Scala等语言的数据类型。

一,Spark SQL支持的数据类型

整数系列:

  • BYTE, TINYINT:表示1B的有符号整数
  • SHORT, SMALLINT:表示2B的有符号整数
  • INT, INTEGER:表示4B的有符号整数
  • LONG, BIGINT:表示8B的有符号整数

小数系列:

  • FLOAT, REAL:表示4B的单精度浮点数
  • DOUBLE:表示8B的双精度浮点数
  • DECIMAL, DEC, NUMERIC:表示任意精度的带符号十进制数字,精确数

日期和时间类型:

  • DATE:表示日期
  • TIMESTAMP:表示日期和时间
  • INTERVAL:表示Calendar Interval

其他类型:

  • STRING:文本类型
  • BINARY:字节序列
  • BOOLEAN:布尔值

复合类型:

  • ARRAY<element_type>
  • STRUCT<field1_name: field1_type, field2_name: field2_type, …>
  • MAP<key_type, value_type>

二,Spark SQL支持的数据类型和pyspark.sql.types 之间的映射关系

  • datetime.datetime 对应 TIMESTAMP
  • datetime.date 对应 DATE
  • list, tuple, array 对应 ARRAY<element_type> 和 STRUCT<field1_name: field1_type, field2_name: field2_type, …>
  • dict 对应MAP<key_type, value_type>
  • int 或 long 对应整数
  • float 对应浮点小数
  • decimal.Decimal 对应 精确数
  • bool 对应 布尔值
  • bytearray 对应 BINARY
  • string 对应 文本类型

三,Spark SQL的Date和Timestamp函数

Spark SQL通常使用字符串来表示Date和Timestamp类型的值,字符串要跟Date和Timestamp相互转换,在转换时,可以设置格式参数fmt,按照特定的格式来相互转换。

fmt是格式字符串,由相应的模式来指定格式:

  • dd:以两位数字显示月份中的天数
  • MM:以两位数字显示月份
  • yyyy:以4位数字显示年份
  • HH:以2位数字显示24小时制
  • ss:以2位数字显示秒数
  • S:小数秒

1,表示Date或timestamp

方法1:用字符串转换为Date或timestamp

date '1970-1-03'
timestamp '1970-1-03 04:05:06.78'

方法2:把字符串按照特定的格式转换为Date或timestamp

to_date(date_str[,fmt])
to_timestamp(timestamp_str[,fmt])

方法2:用数字构造Date或timestamp

make_date(year,month,day)
make_timestamp(year,month,day,hour,min,sec[,timezone])

2,把Date和timestamp转换为string

date_format(timestamp,fmt)

举个例子,把Date和timestamp按照特定的格式转换位字符串:

select date_format(date '1970-1-03', "yyyy-MM-dd");
--1970-01-03
select date_format(timestamp '1970-1-03 04:05:06.78', "yyyy-MM-dd HH:mm:ss.SS");
--1970-01-03 04:05:06.78

3,当前的Date和Timestamp

current_date()
current_timestamp()
now() -- current timestamp

4,提取Date和Timestamp的成分

field:是指year、month、day、hour、minute、second,

source:是指Date或Timestamp

date_part(field,source)

year(date)
month(date)
day(date)
hour(timestamp)
minute(timestamp)
second(timestamp)

5,unixtimestamp

unix timestamp是用数字来表示timestamp

unix_timestamp([timeExp[format]])

from_unixtime(unix_time,format)
to_unix_timestamp(timeExp[,format])

6,Date和Timestamp操作

以day或month为单位来对Date和Timestamp进行操作:

add_months(start_date,num_months)
months_between(timestamp1,timestamp2[,roundOff]) date_add(start_date,num_days)
date_sub(start_date,num_days)
datediff(endDate,startDate)

截断到特定的时间成分:

-- truncate timestamp
date_trunc(fmt,ts) -- truncate date
trunc(date,fmt)

7,UTC时间

from_utc_timestamp(timestamp,timezone)
to_utc_timestamp(timestamp,timezone)

四,文本(literal)

文本常量是指用文本表示一个固定不变的量,

1,16进制的字节序列

X { 'num [ ... ]' | "num [ ... ]" }

2,Date 和 Timestamp Literal

DATE  'yyyy-[m]m-[d]d[T]'
TIMESTAMP 'yyyy-[m]m-[d]d[T][h]h:[m]m:[s]s.[ms][ms][ms][us][us][us][zone_id]'

五,NULL语义

Spark SQL也支持三值逻辑,任何两个值比较的结果是:True、False和Unknown,NULL代表Unknown(未知值)。

1,比较运算

NULL和任何值(包括NULL)进行比较,返回的都是NULL,为了比较NULL值,Spark提供了一个null-safe的“等于运算符” <=>,该运算符的运算逻辑是:

NULL <=> NULL,返回True

NULL <=> 任意非NULL, 返回False

2,逻辑运算符

Spark支持的逻辑运算符是AND, OR和 NOT

NOT NULL 返回NULL

NULL AND false 返回false,NULL AND true, NULL AND NULL都返回NULL

NULL OR true 返回true, NULL OR NULL,NULL OR false 都返回 NULL

3,判断NULL值的函数

ISNULL(null) 返回true

ISNAN(null) 返回false

参考文档:

SQL reference for Databricks Runtime 7.x

NULL semantics

Databricks 第9篇:Spark SQL 基础(数据类型、NULL语义)的更多相关文章

  1. Oracle知识梳理(三)操作篇:SQL基础操作汇总

    Oracle知识梳理(三)操作篇:SQL基础操作汇总 一.表操作 1.表的创建(CREATE TABLE): 基本语句格式:       CREATE TABLE  table_name ( col_ ...

  2. (2.5)Mysql之SQL基础——数据类型

    (2.5)Mysql之SQL基础——数据类型 关键词:mysql数据类型 目录: 一.整数型 二.小数型(以下均不能使用无符号) 三.日期时间型 四.字符串型 一.整数型 额外参数示例: int [( ...

  3. LINQ体验(11)——LINQ to SQL语句之Null语义和String/DateTime方法

    在本系列中.主要介绍LINQ to SQL基础的东西,由于LINQ太强大了,它对我们寻常使用不同的数据源有着不同的内容,其包含对于SQL Server 数据库的LINQ to SQL:对于XML 文档 ...

  4. spark 机器学习基础 数据类型

    spark的机器学习库,包含常见的学习算法和工具如分类.回归.聚类.协同过滤.降维等使用算法时都需要指定相应的数据集,下面为大家介绍常用的spark ml 数据类型.1.本地向量(Local Vect ...

  5. Spark SQL with Hive

    前一篇文章是Spark SQL的入门篇Spark SQL初探,介绍了一些基础知识和API,可是离我们的日常使用还似乎差了一步之遥. 终结Shark的利用有2个: 1.和Spark程序的集成有诸多限制 ...

  6. 【转载】Spark SQL之External DataSource外部数据源

    http://blog.csdn.net/oopsoom/article/details/42061077 一.Spark SQL External DataSource简介 随着Spark1.2的发 ...

  7. Spark SQL 源代码分析系列

    从决定写Spark SQL文章的源代码分析,到现在一个月的时间,一个又一个几乎相同的结束很快,在这里也做了一个综合指数,方便阅读,下面是读取顺序 :) 第一章 Spark SQL源代码分析之核心流程 ...

  8. 【Spark SQL 源码分析系列文章】

    从决定写Spark SQL源码分析的文章,到现在一个月的时间里,陆陆续续差不多快完成了,这里也做一个整合和索引,方便大家阅读,这里给出阅读顺序 :) 第一篇 Spark SQL源码分析之核心流程 第二 ...

  9. Databricks 第6篇:Spark SQL 维护数据库和表

    Spark SQL 表的命名方式是db_name.table_name,只有数据库名称和数据表名称.如果没有指定db_name而直接引用table_name,实际上是引用default 数据库下的表. ...

随机推荐

  1. Ecshop V2.7代码执行漏洞分析

    0x01 此漏洞形成是由于未对Referer的值进行过滤,首先导致SQL注入,其次导致任意代码执行. 0x02 payload: 554fcae493e564ee0dc75bdf2ebf94caads ...

  2. 使用php进行微信小程序图片安全验证

    想用到微信公众平台的图片识别系统,结果报错{"errcode":41005,"errmsg":"media data missing hint: [x ...

  3. Redis史上最全文章教程

    Redis 2020 史上最详细Redis教程 本篇文章并不讲解Redis,只是收集 Redis的优质文章教程 ,文章包含三部分: 理论.编程实战 .面试题. 需要有一定编程功底的人学习 ,如果基础不 ...

  4. JDK8新特性详解(二)

    Stream流的使用 流操作是Java8提供一个重要新特性,它允许开发人员以声明性方式处理集合,其核心类库主要改进了对集合类的 API和新增Stream操作.Stream类中每一个方法都对应集合上的一 ...

  5. 使用xshell软件进行文件的上传和下载

    1.选择xshell的文件里面的属性-->文件传输,把上传路径和下载路径设置好. 上传路径:介绍我们需要向Linux系统里面传东西. 下载路径:就是我们把Linux系统里面的大小拷贝出来. 2. ...

  6. 看了CopyOnWriteArrayList后自己实现了一个CopyOnWriteHashMap

    引言 面试官: 小伙子你有点眼熟啊,是不是去年来这面试过啊. 二胖: 啊,没有啊我这是第一次来这. 面试官: 行,那我们开始今天的面试吧,刚开始我们先来点简单的吧,java里面的容器你知道哪些啊,跟我 ...

  7. 数据库事务特性ACID

    事务 事务(Transaction),一般是指要做的或所做的事情.在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit).在计算机术语中,事务通常就是指数据库事务. 概念 一 ...

  8. 分享知乎关于pull request的分享

    作者:知乎用户链接:https://www.zhihu.com/question/21682976/answer/79489643来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  9. 智能BPOS小票模板字体的使用

    关于伯俊智能BPOS零售小票模板的设置,常用字体"黑体"."宋体"."Arial"这几个字体,在设置的时候看似没有问题, 但是在正真使用打印 ...

  10. 改进你的c#代码的5个技巧(一)

    亲爱的读者,在这篇文章中,我提供了一些c#编程的最佳实践. 你是否在用户输入验证中使用异常处理机制? 如果是,那么你就是那个把你的项目执行速度降低了62倍的人.你不相信我吗?等几分钟;我来教你怎么做. ...