您的位置:首页 > 产品设计 > UI/UE

Spark SQL 之 Migration Guide

2015-12-16 14:18 375 查看

Spark SQL 之 Migration Guide

支持的Hive功能

转载请注明出处: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
中的工厂方法,如下表:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: