Spark SQL 之 Migration Guide
Spark SQL 之 Migration Guide
转载请注明出处:http://www.cnblogs.com/BYRans/
Migration Guide
与Hive的兼容(Compatibility with Apache Hive)
Spark SQL与Hive Metastore、SerDes、UDFs相兼容。Spark SQL兼容Hive Metastore从0.12到1.2.1的所有版本。Spark SQL也与Hive SerDes和UDFs相兼容,当前SerDes和UDFs是基于Hive 1.2.1。
在Hive warehouse中部署Spark SQL
Spark SQL Thrift JDBC服务与Hive相兼容,在已存在的Hive上部署Spark SQL Thrift服务不需要对已存在的Hive Metastore做任何修改,也不需要对数据做任何改动。
Spark SQL支持的Hive特性
Spark SQL支持多部分的Hive特性,例如:
- Hive查询语句,包括:
- SELECT
- GROUP BY
- ORDER BY
- CLUSTER BY
- SORT BY
- 所有Hive运算符,包括
- 比较操作符(=, ⇔, ==, <>, <, >, >=, <=, etc)
- 算术运算符(+, -, *, /, %, etc)
- 逻辑运算符(AND, &&, OR, ||, etc)
- 复杂类型构造器
- 数学函数(sign,ln,cos,etc)
- 字符串函数(instr,length,printf,etc)
- 用户自定义函数(UDF)
- 用户自定义聚合函数(UDAF)
- 用户自定义序列化格式器(SerDes)
- 窗口函数
- Joins
- JOIN
- {LEFT|RIGHT|FULL} OUTER JOIN
- LEFT SEMI JOIN
- CROSS JOIN
- Unions
- 子查询
- SELECT col FROM ( SELECT a + b AS col from t1) t2
- Sampling
- Explain
- 表分区,包括动态分区插入
- 视图
- 所有的Hive DDL函数,包括:
- CREATE TABLE
- CREATE TABLE AS SELECT
- ALTER TABLE
- 大部分的Hive数据类型,包括:
- TINYINT
- SMALLINT
- INT
- BIGINT
- BOOLEAN
- FLOAT
- DOUBLE
- STRING
- BINARY
- TIMESTAMP
- DATE
- ARRAY<>
- MAP<>
- STRUCT<>
支持的Hive功能
下面是当前不支持的Hive特性,其中大部分特性在实际的Hive使用中很少用到。
Major Hive Features
- Tables with buckets:bucket是在一个Hive表分区内进行hash分区。Spark SQL当前不支持。
Esoteric Hive Features
- UNION type
- Unique join
- Column statistics collecting:当期Spark SQL不智齿列信息统计,只支持填充Hive Metastore的sizeInBytes列。
Hive Input/Output Formats
- File format for CLI: 这个功能用于在CLI显示返回结果,Spark SQL只支持TextOutputFormat
- Hadoop archive
Hive优化
部分Hive优化还没有添加到Spark中。没有添加的Hive优化(比如索引)对Spark SQL这种in-memory计算模型来说不是特别重要。下列Hive优化将在后续Spark SQL版本中慢慢添加。
- 块级别位图索引和虚拟列(用于建立索引)
- 自动检测joins和groupbys的reducer数量:当前Spark SQL中需要使用“
SET spark.sql.shuffle.partitions=[num_tasks];”控制post-shuffle的并行度,不能自动检测。 - 仅元数据查询:对于可以通过仅使用元数据就能完成的查询,当前Spark SQL还是需要启动任务来计算结果。
- 数据倾斜标记:当前Spark SQL不遵循Hive中的数据倾斜标记
- jion中STREAMTABLE提示:当前Spark SQL不遵循STREAMTABLE提示
- 查询结果为多个小文件时合并小文件:如果查询结果包含多个小文件,Hive能合并小文件为几个大文件,避免HDFS metadata溢出。当前Spark SQL不支持这个功能。
Reference
Data Types
Spark SQL和DataFrames支持的数据格式如下:
- 数值类型
- ByteType: 代表1字节有符号整数. 数值范围: -128 到 127.
- ShortType: 代表2字节有符号整数. 数值范围: -32768 到 32767.
- IntegerType: 代表4字节有符号整数. 数值范围: -2147483648 t到 2147483647.
- LongType: 代表8字节有符号整数. 数值范围: -9223372036854775808 到 9223372036854775807.
- FloatType: 代表4字节单精度浮点数。
- DoubleType: 代表8字节双精度浮点数。
- DecimalType: 表示任意精度的有符号十进制数。内部使用java.math.BigDecimal.A实现。
- BigDecimal由一个任意精度的整数非标度值和一个32位的整数组成。
- String类型
- StringType: 表示字符串值。
- Binary类型
- BinaryType: 代表字节序列值。
- Boolean类型
- BooleanType: 代表布尔值。
- Datetime类型
- TimestampType: 代表包含的年、月、日、时、分和秒的时间值
- DateType: 代表包含的年、月、日的日期值
- 复杂类型
- ArrayType(elementType, containsNull): 代表包含一系列类型为elementType的元素。如果在一个将ArrayType值的元素可以为空值,containsNull指示是否允许为空。
- MapType(keyType, valueType, valueContainsNull): 代表一系列键值对的集合。key不允许为空,valueContainsNull指示value是否允许为空
- StructType(fields): 代表带有一个StructFields(列)描述结构数据。
- StructField(name, dataType, nullable): 表示StructType中的一个字段。name表示列名、dataType表示数据类型、nullable指示是否允许为空。
Spark SQL所有的数据类型在 org.apache.spark.sql.types 包内。不同语言访问或创建数据类型方法不一样:
Scala
代码中添加import org.apache.spark.sql.types._,再进行数据类型访问或创建操作。

Java
可以使用org.apache.spark.sql.types.DataTypes中的工厂方法,如下表:

Spark SQL 之 Migration Guide的更多相关文章
- Spark SQL and DataFrame Guide(1.4.1)——之DataFrames
Spark SQL是处理结构化数据的Spark模块.它提供了DataFrames这样的编程抽象.同一时候也能够作为分布式SQL查询引擎使用. DataFrames DataFrame是一个带有列名的分 ...
- Spark SQL 1.3测试
Spark SQL 1.3 参考官方文档:Spark SQL and DataFrame Guide 概览介绍参考:平易近人.兼容并蓄——Spark SQL 1.3.0概览 DataFrame提供了一 ...
- Apache Spark 2.2.0 中文文档 - Spark SQL, DataFrames and Datasets Guide | ApacheCN
Spark SQL, DataFrames and Datasets Guide Overview SQL Datasets and DataFrames 开始入门 起始点: SparkSession ...
- spark第七篇:Spark SQL, DataFrame and Dataset Guide
预览 Spark SQL是用来处理结构化数据的Spark模块.有几种与Spark SQL进行交互的方式,包括SQL和Dataset API. 本指南中的所有例子都可以在spark-shell,pysp ...
- Spark SQL 官方文档-中文翻译
Spark SQL 官方文档-中文翻译 Spark版本:Spark 1.5.2 转载请注明出处:http://www.cnblogs.com/BYRans/ 1 概述(Overview) 2 Data ...
- Spark SQL官方文档阅读--待完善
1,DataFrame是一个将数据格式化为列形式的分布式容器,类似于一个关系型数据库表. 编程入口:SQLContext 2,SQLContext由SparkContext对象创建 也可创建一个功能更 ...
- What’s new for Spark SQL in Apache Spark 1.3(中英双语)
文章标题 What’s new for Spark SQL in Apache Spark 1.3 作者介绍 Michael Armbrust 文章正文 The Apache Spark 1.3 re ...
- 深入研究Spark SQL的Catalyst优化器(原创翻译)
Spark SQL是Spark最新和技术最为复杂的组件之一.它支持SQL查询和新的DataFrame API.Spark SQL的核心是Catalyst优化器,它以一种新颖的方式利用高级编程语言特性( ...
- Spark SQL中列转行(UNPIVOT)的两种方法
行列之间的互相转换是ETL中的常见需求,在Spark SQL中,行转列有内建的PIVOT函数可用,没什么特别之处.而列转行要稍微麻烦点.本文整理了2种可行的列转行方法,供参考. 本文链接:https: ...
随机推荐
- jdk1.6与Myeclipse的冲突造成的
出现这样的错误时:ERROR:JDWP Unable to get JNI 1.2 environment ,jvm-> GetEvn() return =- ...
- 泛函编程(35)-泛函Stream IO:IO处理过程-IO Process
IO处理可以说是计算机技术的核心.不是吗?使用计算机的目的就是希望它对输入数据进行运算后向我们输出计算结果.所谓Stream IO简单来说就是对一串按序相同类型的输入数据进行处理后输出计算结果.输入数 ...
- 「Ionic」創建新項目
1.創建新項目 创建一个名为myApp的还有tabs的项目(ionic start <project-name> <optional-template>) 可选模板为sidem ...
- Python私有函数和公开函数
类似_xxx和__xxx这样的函数或变量就是非公开的(private),不应该被直接引用,比如_abc,__abc等: # private私有函数 def _private_1(name): retu ...
- 【转】Linux重定向操作符
Linux重定向操作符 功能描述 > 将命令输出写入文件或设备,而不是命令提示符或句柄,清空原有文件然后写入 < 从文件而不是从键盘或句柄读入命令输入 >> 将命令输出添加到文 ...
- 数据库热备之SQLServer的数据库镜像实施笔记
/ 最初在为公司设计SQLServer数据库镜像的时候,首先考虑的是高可用性(三台计算机,一台见证服务器,一台做主数据库,一台做镜像) 在虚拟机环境下部署成功,一切都是那么的完美.故障转移3秒之内就可 ...
- json 对象 数组
一.json写法以及获得其数据的方法 var jsons={ name:'wen', age:12, price:'qq' } console.log(typeof jsons);//object c ...
- Riot - 比 Facebook React 更轻量的 UI 库
Riot 是一个类似 Facebook React 的用户界面库,只有3.5KB,非常轻量.支持IE8+浏览器的自定义标签,虚拟 DOM,语法简洁.Riot 给前端开发人员提供了除 React 和 P ...
- 百度地图API使用方法详解
最近做了个项目,其中项目中有个需求需要用到百度地图进行导航,通过查阅相关资料参考百度地图api完成了一个例子. API地址:http://developer.baidu.com/map/jsdemo. ...
- PyInstaller编译python3时使用的详细参数介绍
继续翻译中.... The syntax of the pyinstaller command is: pyinstaller [options] script [script ...] | spec ...