Spark SQL 介绍 付士涛. Spark SQL 介绍 付士涛 大纲 Architecture(架构) 像Hive一样的User Interface(用户操作界面) DataFrame的使用(1.3以前叫做SchemaRDD)

Slides:



Advertisements
Similar presentations
Exercise 1 EECS, Peking University Exercise in Query Processing.
Advertisements

第二章 简单的 SQL 语句. 本章要点  创建一个简单的表  SQL 语句介绍  最简单的查询语句 select  带有限制条件的查询  查询结果的排序显示.
顧客交易紀錄分析實務 概述 26.2 資料分析的過程 26.3 顧客交易紀錄分析說明 26.4 實作一、顧客活動剖析實務演練
關聯查詢.
SQL的简单查询.
第八讲 基于Hadoop的数据仓库Hive (PPT版本号:2016年4月6日版本)
商业分析平台-语义模型 用友集团技术中心 边传猛 2013年 11月 06日.
第8章 SELECT敘述的基本查詢 8-1 SELECT查詢指令 8-2 SELECT子句 8-3 FROM子句 8-4 WHERE子句
OceanBase 0.4:从API到SQL 日照
數位芝麻網路公司( 軟體工程師
Tool Command Language --11级ACM班 金天行.
巨量資料平台: Hadoop的生態系.
第三章 数据类型和数据操作 对海量数据进行有效的处理、存储和管理 3.1 数据类型 数据源 数据量 数据结构
第6章 数据展示和输出功能 创建和使用报表 报表(Report)是以打印格式展示数据的一种有效方式。在报表中,可以展示图形、文字标题、字段数据或汇总数据等形式的信息,并可以控制各种数据的大小和外观。 利用报表,还可以按照数据之间的逻辑关系和所需的方式来组织数据之间的排版布局,对数据进行多级汇总和统计,或以图形方式展示数据。
Google App Engine Google 應用服務引擎.
在PHP和MYSQL中实现完美的中文显示
Made by Feng Nie 开源机器学习库&Hadoop介绍 Made by Feng Nie
Orca: A Modular Query Optimizer Architecture for Big Data Orca: 一个处理大数据的模块化的查询优化体系 Sigmod 2014 报告人 万丽蓉.
基于Hadoop的数据仓库Hive.
資料庫安全 (Database Security)
Spark在智慧图书馆建设中的应用探索 2017年12月22日.
SQL Server 2000 数据库入门.
第4章(2) 空间数据库 —关系数据库 北京建筑工程学院 王文宇.
实验 2:MS Access QBE Query使用
第5章 資料倉儲的資料建置.
从TDW-Hive到TDW-SparkSQL
SQL Injection.
Spring & mongodb java实战mongodb 曹巍 2013年9月22日.
Spark Structured Streaming 流式大数据处理
《Spark编程基础》 《 Spark编程基础》课程介绍 (PPT版本号:2018年2月)
第十章 IDL访问数据库 10.1 数据库与数据库访问 1、数据库 数据库中数据的组织由低到高分为四级:字段、记录、表、数据库四种。
iRepor报表设计基础 IReport安装 普通实体报表 数据结果集报表 工作流主从报表 饼状图报表 柱状图,曲线图报表 条形码报表
数据挖掘工具性能比较.
PaPaPa项目架构 By:Listen 我在这.
泛型委托 泛型接口、方法和委托.
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
DevDays ’99 The aim of this mission is knowledge..
Spark SQL 介绍 付士涛. Spark SQL 介绍 付士涛 大纲 Architecture(架构) 像Hive一样的User Interface(用户操作界面) DataFrame的使用(1.3以前叫做SchemaRDD)
第11章 ListView延迟加载效果 授课老师:高成珍 QQ号: QQ群: 、
SOA – Experiment 2: Query Classification Web Service
Answering aggregation question over knowledge base
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C语言程序设计 主讲教师:陆幼利.
第18章 SQL結構化查詢語言 18-1 SQL語言的基礎 18-2 SQL的查詢指令 18-3 SQL子查詢與合併查詢.
中国科学技术大学计算机系 陈香兰 2013Fall 第七讲 存储器管理 中国科学技术大学计算机系 陈香兰 2013Fall.
SAP Query 建立User Group (SQ03) 建立Infoset (SQ02)
查询与视图 蔡海洋.
從 ER 到 Logical Schema ──兼談Schema Integration
VB与Access数据库的连接.
本讲内容 SQL 概述 SQL 的查询功能 SQL 的操作功能 SQL 的定义功能.
Web安全基础教程
本节内容 Win32 API中的宽字符 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
資料庫管理 Database Managent Ex.1-2 課本範例練習
3.16 枚举算法及其程序实现 ——数组的作用.
8 SELECT敘述的基本查詢 8-1 SELECT查詢指令 8-2 SELECT子句 8-3 FROM子句 8-4 WHERE子句
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
Delphi 7.0开发示例.
Python 环境搭建 基于Anaconda和VSCode.
11 檢視表的建立 11-1 檢視表的基礎 11-2 建立檢視表 11-3 修改與刪除檢視表 11-4 編輯檢視表的內容.
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
VB与Access数据库的连接.
MySQL执行计划解读 胡中泉.
大数据应用人才培养系列教材 大数据实践 刘 鹏 张 燕 总主编 袁晓东 主编 黄必栋 副主编.
WEB程序设计技术 数据库操作.
C#快速導讀 流程控制.
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
第8章 Spark MLlib (PPT版本号: 2019年春季学期)
Web安全基础教程
Presentation transcript:

Spark SQL 介绍 付士涛

大纲 Architecture(架构) 像Hive一样的User Interface(用户操作界面) DataFrame的使用(1.3以前叫做SchemaRDD)

Architecture 优化 传统的SQL SparkSQL Parsing Analysis Binding & Analyzing Sql Text DataFrame Hive AST Parsing Unresolved Logical Plan Unresolved Logical Plan 传统的SQL SparkSQL Analysis Binding & Analyzing Metadata Resolved Logical Plan Logical Plan 优化 Optimize Optimizing Optimized Logical Plan Optimized Logical Plan Query Planning Query Planning Physical Plans Physical Plan Execution 09.11.2018 RDD&Execution

SparkSQL和Hive-On-Spark对比 功能上 实现上 覆盖了大部分的HiveQL特征 /HiveServer / CLI 提供了Spark的引擎特征(如缓存表) 提供给开发者的API(DataFrame) 为高级用户提供可插拔的组件(分析器/优化器等) 借用了HIVE上词汇分析的jars 借用了Hive Metastore和数据访问的API 重写了自己的分析器、执行器、优化器,脱离了hive的大部分依赖,提高了执行的效率 09.11.2018

开启SparkSQL Thrift Service /CLI Start the ThriftService $SPARK_HOME/sbin/start-thriftserver.sh Start the CLI $SPARK_HOME/bin/spark-sql 注:几乎在不改动HIVE任何配置的情况下重用HIVE的代码 09.11.2018

SparkSQL的三个核心部分 1. 可以加载各种结构化数据源(e.g., JSON, Hive, and Parquet). 2. 可以让你通过SQL ,Spark 内部程序或者外部工具,通过标准的数据库连接(JDBC/ODBC)连接Spark,比如一个商业智能的工具Tableau 3.SparkSQL 提供丰富又智能的SQL或者 regular Python/Java/Scala code,包括 join RDDS ,SQL tables ,使用SQL自定义用户函数UDF 09.11.2018

结构化数据的统一接口 09.11.2018

DataFrame 容易使用的API 支持Pydata Pandas 内置很多常用的功能和数据源 多种开发语言的支持(Scala/Java/Python/R/SQL) 感觉不到是运行在分布式集群之上的 只有在真正去执行的时候才会真实进行操作(lazy) 对逻辑计划和表达式进行了优化 可以和hive共享同一个metastore 和spark进行了无缝的集成 可扩展性 09.11.2018

DataFrame & Column Column(表达式) DataFrame(操作) 聚合函数 基本操作 printSchema / schema / explain / dtypes / cache/ persist etc. Actions head / first / take / count / collect etc. 像RDD一样的操作 map / flatMap / mapPartitions / foreach etc 集成性语言查询(SQL) filter / join / union / select / orderBy / groupBy / cube / rollup / sample / randomSplit etc. Column(表达式) 聚合函数 sum/avg/max/min … 一般函数操作(UDF) and / or / not / rand / lower / upper ... 数学函数 + / - / * /cos/sin/asin .. 统计函数 pearsonCorrelation / crossTabulate / calculateCov … 09.11.2018

开始:DataFrames SparkSQL切入点 Spark SQL 中所有相关功能的入口点是 SQLContext 类或者它的子类, 创建一个 SQLContext 需要一个 SparkContext。(在此以scala代码为例) 使用 Scala 创建方式如下: val sc: SparkContext // An existing SparkContext. val sqlContext = new org.apache.spark.sql.SQLContext(sc) // this is used to implicitly convert an RDD to a DataFrame. import sqlContext.implicits._ 注:HiveContext继承了SQLContext,使用它即可对hive进行操作,可以直接从hive表读取数据,而且提供了UDF的功能。 09.11.2018

创建DataFrame的形式 使用 SQLContext,应用可以从一个存在的 RDD、Hive 表或者数据源中创建 DataFrame。 val sc: SparkContext // An existing SparkContext. val sqlContext = new org.apache.spark.sql.SQLContext(sc) val df = sqlContext.read.json("file:///home/data/people.json") // Displays the content of the DataFrame to stdout df.show() 09.11.2018

DataFrame操作 DataFrame提供了一种DSL语言,例如scala,java以及python //引用上页的代码 // Print the schema in a tree format df.printSchema() // root // |-- age: long (nullable = true) // |-- name: string (nullable = true) // Select everybody, but increment the age by 1 df.select(df("name"), df("age") + 1).show() // name (age + 1) // Andy 31 // Justin 20 // Select people older than 21 df.filter(df("age") > 21).show() // age name // 30 Andy 09.11.2018

RDD转化为DataFrame 利用反射推断模式 Spark SQL的 Scala 接口支持将包含样本类的 RDD 自动转换为 DataFrame。这个样本类定义了表的模式。样本类的参数名字通过反射来读取,然后作为列的名字。样本类可以嵌套或者包含复杂的类型如序列或者数组。这个 RDD 可以隐式转化为一个 DataFrame,然后注册为一个表,表可以在后续的 sql 语句中使用。 编程指定模式 当样本类不能提前确定(例如,记录的结构是经过编码的字符串,或者一个文本集合将会被解析,不同的字段投影给不同的用户),一个 DataFrame 可以通过三步来创建。 从原来的 RDD 创建一个行的 RDD 创建由一个 StructType 表示的模式与第一步创建的 RDD 的行结构相匹配 在行 RDD 上通过 createDataFrame 方法应用模式 09.11.2018

反射推断模式 val sqlContext = new org.apache.spark.sql.SQLContext(sc) import sqlContext.implicits._ case class Person(name: String, age: Int) val people = sc.textFile("file:///resources/people.txt").map(_.split(",")).map(p => Person(p(0), p(1).trim.toInt)).toDF() people.registerTempTable("people") val teenagers = sqlContext.sql("SELECT name, age FROM people WHERE age >= 13 AND age <= 19") teenagers.map(t => "Name: " + t(0)).collect().foreach(println) 09.11.2018

编程指定模式 从原来的 RDD 创建一个行的 RDD val sqlContext = new org.apache.spark.sql.SQLContext(sc) val people = sc.textFile("file:///resources/people.txt") import org.apache.spark.sql.Row; val rowRDD = people.map(_.split(",")).map(p => Row(p(0), p(1).trim)) 创建由一个 StructType 表示的模式与第一步创建的 RDD 的行结构相匹配 val schemaString = "name age" import org.apache.spark.sql.types.{StructType,StructField,StringType}; val schema =StructType( schemaString.split(" ").map(fieldName => StructField(fieldName, StringType, true))) 在行 RDD 上通过 createDataFrame 方法应用模式 val peopleDataFrame = sqlContext.createDataFrame(rowRDD, schema) peopleDataFrame.registerTempTable("people") val results = sqlContext.sql("SELECT name FROM people") results.map(t => "Name: " + t(0)).collect().foreach(println) 09.11.2018

Data Source APIs // Scala val df1 = Seq(("Justin", 31, 1), ("Hao", 33, 2)). toDF("name","age", "deptId") df1.write.mode( SaveMode.Overwrite).parquet("/data/people.parquet") 09.11.2018

用Hive集成 // Scala SparkContext sc = new SparkContext(new SparkConf() . setMaster("local"). setAppName("test")); HiveContext hc = new HiveContext(sc); val hc = new org.apache.spark.sql.HiveContext(sc) val employee = hc.json("/user/data/employee") val dept = hc.json("/user/data/department") val result = employee.filter("age > 30") .join(dept, employee("deptId") === dept("id")) . groupBy(dept("name"), "gender") result.orderBy("age").select("gender").head(4) 09.11.2018

// Assume we have a Hive Table Name "salary" employee.registerTempTable("employee") val result: DataFrame = hc.sql("SELECT avg(s.amount), e.deptId FROM employee e JOIN salary s ON e.id=s.id GROUP BY e.deptId") result.write(). saveAsTable("myresult") // Do query against table "myresult" in Hive 09.11.2018

自定义UDF // Register the function in Scala sqlContext.udf.register("myUdf", (arg1: Int, arg2: String) => arg2 + arg1) // Query in SQL using the function sqlContext.sql("SELECT myUDF(age, name) from people") 09.11.2018

内存中的列式缓存表 Spark Caching DataFrame Columnar Caching 09.11.2018

内存中的列式缓存表(续) 更少的分配对象(更少的内存,更少的GC) 扫描/反序列化所需的列 更好的压缩 开发人员code形式: df.cache() / df.persist(StorageLevel) / df.unpersist() 对于CLI/ThriftService用户 "CACHE [LAZY]TABLE result AS SELECT * FROM employee WHERE joinDate>’2010-07-01’;" "UNCACHE TABLE result;" 09.11.2018

SQL自动的优化执行计划 SparkSQL优化逻辑计划和表达式树 // Scala val t1 = hc.table("a") val t2 = hc.table("b") val result1 = t1.join(t2, (t1("key")===t2("key")) && (t1("key") < 10)).select(t1("value"), t2("value")) SELECT a.age, b. FROM aINNER JOIN b ON a.key=b.key AND a.key<10 result1.explain(true) // print logical plan (before / after optimization) 09.11.2018

谢谢 09.11.2018