SparkSQL数据类型

news2024/9/20 13:23:07

支持的数据类型

SparkSQL支持的数据类型如下:

  1. 数值类型
  • ByteType:表示1字节带符号整数(“带符号”意味着它可以表示正数和负数。)。数字的范围是-128到127。
  • ShortType:表示2字节带符号整数。数字的范围是-32768到32767。
  • IntegerType:表示4字节带符号整数。数字的范围是-2147483648到2147483647。
  • LongType:表示8字节有符号整数。数字的范围为-922372036854775808到9223372036854775807。
  • FloatType:表示4字节单精度浮点数。
  • DoubleType:表示8字节双精度浮点数。
  • DecimalType:表示任意精度带符号十进制数。内部由java.math支持。BigDecimal。BigDecimal由一个任意精度的未缩放整数和一个32位整数小数组成。
  1. “带符号”意味着它可以表示正数和负数。
  2. 单精度
    根据IEEE 754标准,单精度浮点数的32位被划分为三个部分:
    符号位(1位):表示数值的正负号。
    指数部分(8位):表示数值的指数部分,用来表示数值的大小。
    尾数部分(23位):表示数值的小数部分,用来表示数值的精度。
  3. 双精度
    根据IEEE 754标准,双精度浮点数的64位被划分为三个部分:
    符号位(1位):表示数值的正负号。
    指数部分(11位):表示数值的指数部分,用来表示数值的大小。
    尾数部分(52位):表示数值的小数部分,用来表示数值的精度。
  4. BigDecimal
    由于 BigDecimal 的无符号整数值可以非常大(理论上没有上限,受限于内存大小),并且比例也可> 以取任意值,因此 BigDecimal 可以表示任意精度的数值。
  1. 字符串类型
  • StringType:表示字符串值。
  • VarcharType(length):这是一种带有长度限制的 StringType 变体。如果输入字符串超过长度限制,则数据写入将失败。注意:这种类型只能在表结构中使用,不能在函数或操作符中使用。
  • CharType(length):VarcharType(长度)的一种变体,长度固定。读取CharType(n)类型的列总是返回长度为n的字符串值。Char类型的列比较将把较短的列填充到较长的长度。
  1. 字节类型
  • BinaryType:表示字节序列值。
  1. 布尔类型
  • BooleanType:表示布尔值。
  1. 日期时间类型
  • DateType:表示由年、月和日字段值组成的值,不带时区。
  • TimestampType:带有本地时区的时间戳(Timestamp_LTZ)。它表示由字段年、月、日、小时、分钟和秒的值组成的值,以及会话本地时区。时间戳值表示绝对时间点。
  • TimestampNTZType:不带时区的时间戳(Timestamp_NTZ)。它表示由字段年、月、日、小时、分钟和秒的值组成的值。所有操作都是在不考虑任何时区的情况下执行的。
    注意:Spark中的TIMESTAMP是用户指定的别名,与TIMESTAMP_LTZ和TIMESTAMP_NTZ变体之一相关联。用户可以通过配置spark.sql.timestampType将默认时间戳类型设置为timestamp_LTZ(默认值)或timestamp_NTZ。
  1. 间隔类型
  • YearMonthIntervalType(startField, endField):表示由以下字段的连续子集组成的年月间隔:月份,年内的月份[0…11];年份,在[0…178956970]范围内的年份。
    startField 是最左侧的字段,而 endField 是最右侧的字段。startField 和 endField 的有效值分别是 0(MONTH)和 1(YEAR)。
    在这里插入图片描述
  • DayTimeIntervalType(startField, endField):表示由以下字段的连续子集组成的一天时间间隔:
    • SECOND,分钟内的秒数,可能还有几分之一秒[0…59.999999],
    • MINUTE,小时内的分钟[0…59],HOUR,天内的小时[0…23],DAY,范围[0…106751991]内的天。
      单个区间字段是非负的,但区间本身可以有一个符号,并且是负的。
      startField是该类型的最左侧字段,endField是最右侧字段。startField和endField的有效值为0(天)、1(小时)、2(分钟)、3(秒)
      在这里插入图片描述
  1. 复杂类型
  • ArrayType(elementType, containsNull):表示由elementType类型的元素序列组成的值。contains null用于指示ArrayType值中的元素是否可以具有null值。
  • MapType(keyType, valueType, valueContainsNull):表示由一组键值对组成的值。键的数据类型由keyType描述,而值的数据类型则由valueType描述。对于MapType值,键不允许具有null值。valueContainsNull用于指示MapType值的值是否可以为空值。
  • StructType(fields):用StructFields(字段)序列描述的结构表示值。
    • StructField(name, dataType, nullable):表示StructType中的字段。字段的名称由name表示。字段的数据类型由dataType表示。null用于指示这些字段的值是否可以为null。

类名和别名汇总

在这里插入图片描述

浮点特殊值

Spark SQL以不区分大小写的方式支持几个特殊的浮点值:

  • Inf/+Inf/Infinity/+Infinity:正无穷大
    • FloatType:equivalent to Scala Float.PositiveInfinity。
    • DoubleType:equivalent to Scala Double.PositiveInfinity。
  • -Inf/-Infinity:负无穷
    • FloatType: equivalent to Scala Float.NegativeInfinity。
    • DoubleType: equivalent to Scala Double.NegativeInfinity。
  • NaN:非数值
    • FloatType: equivalent to Scala Float.NaN。
    • DoubleType: equivalent to Scala Double.NaN。

正/负无穷语义

对正无穷大和负无穷大有特殊的处理。它们具有以下语义:

  • 正无穷大乘以任何正值返回正无穷大。
  • 负无穷大乘以任何正值都会返回负无穷大。
  • 正无穷大乘以任何负值都会返回负无穷大。
  • 负无穷大乘以任何负值都会返回正无穷大。
  • 正/负无穷乘以0返回NaN。
  • 正/负无穷大等于自身。
  • 在聚合中,所有正无穷大值都被分组在一起。同样,所有负无穷大值都被分组在一起。
  • 正无穷大和负无穷大在连接键中被视为正常值。
  • 正无穷排序低于NaN,高于任何其他值。
  • 负无穷排序低于任何其他值。

NaN语义

在处理与标准浮点语义不完全匹配的浮点或双精度类型时,对非数字(NaN)有特殊的处理。明确地:

  • NaN=NaN返回true。
  • 在聚合中,所有NaN值都分组在一起。
  • NaN在连接键中被视为正常值。
  • NaN值按升序排列时排在最后,大于任何其他数值。

示例

SELECT double('infinity') AS col;
+--------+
|     col|
+--------+
|Infinity|
+--------+

SELECT float('-inf') AS col;
+---------+
|      col|
+---------+
|-Infinity|
+---------+

SELECT float('NaN') AS col;
+---+
|col|
+---+
|NaN|
+---+

SELECT double('infinity') * 0 AS col;
+---+
|col|
+---+
|NaN|
+---+

SELECT double('-infinity') * (-1234567) AS col;
+--------+
|     col|
+--------+
|Infinity|
+--------+

SELECT double('infinity') < double('NaN') AS col;
+----+
| col|
+----+
|true|
+----+

SELECT double('NaN') = double('NaN') AS col;
+----+
| col|
+----+
|true|
+----+

SELECT double('inf') = double('infinity') AS col;
+----+
| col|
+----+
|true|
+----+

CREATE TABLE test (c1 int, c2 double);
INSERT INTO test VALUES (1, double('infinity'));
INSERT INTO test VALUES (2, double('infinity'));
INSERT INTO test VALUES (3, double('inf'));
INSERT INTO test VALUES (4, double('-inf'));
INSERT INTO test VALUES (5, double('NaN'));
INSERT INTO test VALUES (6, double('NaN'));
INSERT INTO test VALUES (7, double('-infinity'));
SELECT COUNT(*), c2 FROM test GROUP BY c2;
+---------+---------+
| count(1)|       c2|
+---------+---------+
|        2|      NaN|
|        2|-Infinity|
|        3| Infinity|
+---------+---------+

参考文献

https://spark.apache.org/docs/latest/sql-ref-datatypes.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2058348.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

打造更高效的项目:如何选择合适的管理工具

国内外主流的 10 款项目工程管理系统对比&#xff1a;PingCode、Worktile、Asana、Trello、Monday.com、ClickUp、Wrike、泛微项目协同工具、广联达项目管理软件、泛普OA。 在选择项目工程管理系统时&#xff0c;你是否经常感到无从下手&#xff0c;担心投资不当或工具不适合自…

细数全球七大网络空间安全搜索引擎

随着网络攻击的频率和复杂性不断增加&#xff0c;安全专业人士需要利用各种工具来识别和应对潜在的威胁&#xff0c;网络安全搜索引擎就是其中之一&#xff0c;它们帮助安全专家查找漏洞、分析威胁情报以及监控互联网活动&#xff0c;本文将介绍全球七大网络安全搜索引擎。 1.…

误闯机器学习(第一关-概念和流程)

以下内容&#xff0c;皆为原创&#xff0c;实属不易&#xff0c;请各位帅锅&#xff0c;镁铝点点赞赞和关注吧&#xff01; 好戏开场了。 一.什么是机器学习 机器学习就是从数据中自动分析获取模型&#xff08;总结出的数据&#xff09;&#xff0c;并训练模型&#xff0c;去预…

Gadmin极速开发平台,几分钟给你整一个OA系统出来

Gadmin极速开发平台 在企业信息化的大潮中&#xff0c;Gadmin极速开发平台以其独特的低代码开发模式&#xff0c;为企业提供了一套高效、灵活的解决方案。本文将介绍Gadmin平台的基本信息、核心特点&#xff0c;以及它如何帮助企业快速实现信息化建设。 软件简介 Gadmin是一个…

华为:数据入湖,企业数据的逻辑汇聚(附数据湖建设方案下载)

往期回顾>> 华为内部“维度数据”解析 数据入湖是个什么鬼&#xff1f; 为什么数据治理工作越来越迷茫&#xff1f;(附数据治理方案PPT下载) 数字化的本质逻辑:连接、数据、智能 125页PPT&#xff1a;数据中台应用技术方案 数据中台解决方案&#xff0c;附55页PPT…

React 学习——forwardRef,暴漏子组件的dom元素

父组件拿到子组件的值&#xff1a;使用forwardRef import { forwardRef,useRef } from react;const Input forwardRef((props,ref)>{return <input type"text" ref{ref} /> })const App () > {const inputRef useRef(null);const showRef () > …

[答疑]心脏的功能是泵血,心脏是个模块,所以“功能模块”没毛病啊!

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 有同学在我的视频下留言&#xff1a; 其实认真看我的视频或书就明白&#xff0c;这和我说的不是一回事。 这个留言有点新意&#xff0c;和以往的留言如“人能说话&#xff0c;嘴就是…

Python | Leetcode Python题解之第352题将数据流变为多个不想交区间

题目&#xff1a; 题解&#xff1a; from sortedcontainers import SortedDictclass SummaryRanges:def __init__(self):self.intervals SortedDict()def addNum(self, val: int) -> None:intervals_ self.intervalskeys_ self.intervals.keys()values_ self.intervals…

常见分布式ID解决方案的优缺点

分布式系统之所以难,很重要的原因之一是“没有一个全局时钟,难以保证绝对的时序”。 一、分布式ID的特性或要求: 唯一性:确保生成的ID是应用系统内唯一。高可用性:确保任何时候都能正确的生成ID。有意义:或者说包含更多信息,例如时间、业务等信息。如:有序性,通常都需…

多重示例详细说明Eureka原理实践

Eureka原理&#xff08;Eureka Principle&#xff09;是指在长时间的思考和积累之后&#xff0c;通过偶然的瞬间获得灵感或发现解决问题的方法的一种认知现象。这个过程通常包括三个主要阶段&#xff1a;准备阶段、潜伏期以及突然的灵感爆发。下面详细说明Eureka原理的实践步骤…

零拷贝并非万能解决方案:重新定义数据传输的效率极限

PageCache有什么作用&#xff1f; 在我们前面讲解零拷贝的内容时&#xff0c;我们了解到一个重要的概念&#xff0c;即内核缓冲区。那么&#xff0c;你可能会好奇内核缓冲区到底是什么&#xff1f;这个专有名词就是PageCache&#xff0c;也被称为磁盘高速缓存。也可以看下wind…

TY6802 同步整流PCB设计注意事项

TY6802 系列是一款用于反激式电源次级同步整流芯片&#xff0c;TY6802能可靠支持包括 DCM、CCM和准谐振模式。TY6802 集成了一个 100V 功率 MOSFET&#xff08;TY6802A&#xff1a;100V15mR; TY6802B&#xff1a;100V10mR; TY6802C&#xff1a;100V7.5mR;) &#xff0c;可以取代…

基于ESP32的OEE分析开发板上MQTT协议的实现

整理自 《Implementation of MQTT Protocol on ESP32-Based OEE Analysis Development Board》&#xff0c;作者是Amir Akbar Wicaksono, Yuli Kurnia Ningsih, 和 Indra Surjati&#xff0c;发表于《MITOR: Jurnal Teknik Elektro》。论文讨论了在工业4.0背景下&#xff0c;通…

数字化技术分别有哪些,数字化技术特点和优势是什么?

​随着企业数字化进程的加速&#xff0c;人工智能、工业互联网、低代码等底层技术正全面重塑企业运营生产体系&#xff0c;推动新的生产要素、研发范式和商业模式的建立。 这个变革过程不仅是对原有制造体系的颠覆&#xff0c;而且会影响各行各业的所有细分行业和产业链价值链…

探索地理空间分析的新世界:Geopandas的魔力

文章目录 探索地理空间分析的新世界&#xff1a;Geopandas的魔力背景&#xff1a;为何选择Geopandas&#xff1f;这个库是什么&#xff1f;如何安装这个库&#xff1f;五个简单的库函数使用方法场景应用&#xff1a;Geopandas在实际工作中的应用常见bug及解决方案总结 探索地理…

UE5 日期时间蓝图变量 加减节点

参考链接&#xff1a;Having troubles with DateTime in UE5 - General / Feedback & Requests - Epic Developer Community Forums (unrealengine.com) 直接粘贴到UE5蓝图图表可用。&#xff08;反之相加&#xff0c;用负号操作一下&#xff09; 减号蓝图节点&#xff08;…

php源码编译与初始化

1 php源码编译 解压 yum install -y bzip2 # 安装解压工具 tar -xf php-7.4.12.tar.bz2 # 解压文件./condigure ./configure --prefix/usr/local/php --with-config-file-path/usr/local/php/etc --enable-fpm --with-fpm-usernginx --with-fpm-groupnginx --with-curl --wi…

Nginx--流量控制

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 一、流量限制 1、介绍 流量限制 (rate-limiting)&#xff1b;可用来限制用户在给定时间内HTTP请求的数量。请求&#xff0c;可以是一个简单网站首页…

Element-UI Table实现列表筛选数据及列表嵌套选择框

VUE 框架在 Element UI 的基础上&#xff0c;Table 组件中实现了列表数据的修改功能&#xff0c;支持单选和多选功能&#xff0c;并且列表具备筛选功能。样式如图所示。 功能介绍 点击table列名实现筛选查询功能相关性判断点击列表中的正方形实现选择框功能&#xff0c;同时修…

设计模式-创建型模式-建造者模式

1.建造者模式定义 建造者模式又称生成器模式&#xff0c;将一个复杂对象的构建与表示分离&#xff0c;使得同样的构建过程可以创建不同的表示&#xff1b; 1.1 建造者模式优缺点 优点 封装性好&#xff0c;主要的业务员逻辑封装在指挥者类中&#xff1b;客户端不必知道产品内…