资讯专栏INFORMATION COLUMN

spark sql语法

IT那活儿 / 3015人阅读
spark sql语法

点击上方“IT那活儿”,关注后了解更多内容,不管IT什么活儿,干就完了!!!


说  明


Spark SQL也可以通过设置参数来使其符合ANSI标准(结构化查询语言(SQL)是用于访问和管理数据库的数据库管理员(DBA)的标准语言),通过设置spark.sql.ansi.enabled=’true’(默认值是false)选项来控制spark sql是否符合ANSI标准,当spark.sql.storeAssignmentPolicy(默认值为ANSI)选项为ANSI时,spark sql符合ANSI标准的存储分配原则,这两个配置选项是相互独立的。


01


基本语法


1.1 算数运算
spark sql进行算数运算时不会检查长度溢出,例如:
结果为:
1.2 类型转换
Spark sql有三种类型转换,显示转换、强制类型转换和存储分配转换。
当设置spark.sql.ansi.enabled=true时,非法的类型转换就会抛出运行时异常;
当设置spark.sql.storeAssigmentPolicy=”ANSI”时,insert into语法抛出语义分析异常。
ANSI标准不允许以下直接的类型转换,NumbericType <=> BooleanType;StringType<=>BinaryType。
下表给出了强制类型转换中的组合,Y表示组合有效,N表示无效。
1.3 NULL值处理
1)比较运算符
Spark sql支持标准的比较操作符,例如“>”、“>=”、“=”、“<”和“<=”,当其中一个操作数unknow或NULL时,结果就为unknow或NULL,为了比较空值是否相等,spark提供了操作符“<=>”,当一个操作数为unknow或NULL时返回false,当两个操作数都为unknow或NULL时,返回值为true。
例如:
2)逻辑判断操作符
逻辑判断操作符有and、or和not,参数为逻辑表达式,返回值为Boolean类型。
例如:
一些Spark sql函数参数为NULL,则返回结果也为NULL,例如:
还有一些可以处理NULL值得函数,例如:
3)聚合函数对于NULL值得处理
聚合函数有MAX、MIN、AVG、SUM、EVERY、ANY、SOME。
  • COUNT(*)返回的所有的数据个数
  • COUNT(NAME)返回的是NAME不为NULL的个数。
  • 其他聚合函数都为将NULL排除再进行操作。
  • WHERE、HAVING、JOIN字句中NULL值得处理。
  • WHERE字句中将会排除过滤条件为NULL的数据。
  • WHERE NAME IS NULL将会返回NAME为NULL的数据。
  • HAVING字句将会将为NULL的数据过滤掉。
  • JOIN字句中将会将为NULL值得数据过滤掉,但是如果使用<=>作为关联条件时将会一块将NULL进行返回。意思就是两边关联条件如果都为NULL也是可以返回的。
  • GROUP BY、DISTINCT对NULL值都会进行处理,不会排除为NULL值得数据。
  • ORDER BY字句也会将NULL进行排序,默认情况下,NULL值得数据都会排在最前面,如果想排在最后可以:ORDER BY AGE NULLS  LAST进行处理。
  • EXISTS和NOT EXISTS字句中,也不会将NULL值进行排除。


02


函  数


内置函数见:https://spark.apache.org/docs/latest/api/sql/,里面包括了各种字符串,日期,转换等非常有用的内置函数。
自定义函数(UDF)
当内置函数不能满足需求时也可以自己定义函数,使用方法如下:
1)首先定义函数:
例如该函数作用于字符串类型,按照“,”进行切割,然后返回一个元组,然后注册函数:
2)最后是使用函数:


03


数据类型


Spark sql和dataFrame支持以下数据类型:
1)数字类型
ByteType、ShortType、IntegerType、LongType、FloatType、DoubleType、DecimalType、BigDecimal 。
2)字符串类型
StringType、VarcharType(StringType 类型变体,有长度限制)、CharType(VarcharType类型变体,固定长度)。
3)二进制类型
BinaryType
4)Boolean类型
BooleanType
5)时间类型
TimestampType(到秒)、DateType(到天)
6)复杂类型
  • ArrayType(elementType, containsNull):表示元素序列数据类型,containsNull用于指示是否可以包括空值。
  • MapType(keyType, valueType, valueContainsNull)用于表示键值对数据类型,其中key不能为空值,valueContainsNull指示值是否可以为空。
  • StructType(fields):一系列由StructField(name, dataType, nullable)定义的数据类型,nullable指示是否可以为空。
通过import org.apache.spark.sql.types._ 来使用这些数据类型。
例如:


end



本文作者:潘宗昊

本文来源:IT那活儿(上海新炬王翦团队)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129645.html

相关文章

  • Spark SQL知识点与实战

    摘要:是最新的查询起始点,实质上是和的组合,所以在和上可用的在上同样是可以使用的。转换为转换为其实就是对的封装,所以可以直接获取内部的注意此时得到的存储类型为是具有强类型的数据集合,需要提供对应的类型信息。Spark SQL概述1、什么是Spark SQLSpark SQL是Spark用于结构化数据(structured data)处理的Spark模块。与基本的Spark RDD API不同,Sp...

    番茄西红柿 评论0 收藏2637
  • Spark SQL知识点大全与实战

    摘要:本文发于我的个人博客知识点大全与实战我正在大数据技术派和朋友们讨论有趣的话题,你也来加入吧概述什么是是用于结构化数据处理的模块。是最新的查询起始点,实质上是和的组合,所以在和上可用的在上同样是可以使用的。 关注公众号:大数据技术派,回复资料,领取1000G资料。本文发于我的个人博客:Spark SQL知识点大全...

    番茄西红柿 评论0 收藏2637
  • Spark SQL学习笔记

    摘要:是中处理结构化数据的模块。可以从很多数据源加载数据并构造得到,如结构化数据文件,中的表,外部数据库,或者已有的。使用反射机制,推导包含指定类型对象的。这一功能应该优先于使用。随后,将会扫描必要的列,并自动调整压缩比例,以减少内存占用和压力。 Spark SQL是Spark中处理结构化数据的模块。与基础的Spark RDD API不同,Spark SQL的接口提供了更多关于数据的结构信息...

    qieangel2013 评论0 收藏0
  • SQLflow:基于python开发的分布式机器学习平台, 支持通过写sql的方式,运行spark,

    摘要:主页脚本页面单页面注意下载文件配置中的路径。一个简单的操作集群的是不是很简单。正在新增版深度学习功能谢谢支持。 简书博客: https://www.jianshu.com/u/3fe... 百度云搜索:http://www.lqkweb.com 搜网盘:http://www.swpan.cn 淘宝券搜索:http://www.wodecai.cn 淘宝券:http://www....

    legendaryedu 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<