Spark1.0新特性--Spark SQL
Spark1.0出来了,变化还是挺大的,文档比以前齐全了,RDD支持的操作比以前多了一些,Spark on yarn功能我居然跑通了。但是最最重要的就是多了一个Spark SQL的功能,它能对RDD进行Sql操作,目前它只是一个alpha版本,喜欢尝鲜的同志们进来看看吧,下面是它的官网的翻译。
Spark SQL是支持在Spark中使用Sql、HiveSql、Scaca中的关系型查询表达式。它的核心组件是一个新增的RDD类型SchemaRDD,它把行对象用一个Schema来描述行里面的所有列的数据类型,它就像是关系型数据库里面的一张表。它可以从原有的RDD创建,也可以是Parquet文件,最重要的是它可以支持用HiveQL从hive里面读取数据。
下面是一些案例,可以在Spark shell当中运行。
首先我们要创建一个熟悉的Context,熟悉spark的人都知道吧,有了Context我们才可以进行各种操作。
val sc: SparkContext // 已经存在的SparkContext val sqlContext = new org.apache.spark.sql.SQLContext(sc) import sqlContext._
Running SQL on RDDs
Spark SQL支持的一种表的类型是Scala的case class,case class定义了表的类型,下面是例子:
val sqlContext = new org.apache.spark.sql.SQLContext(sc) import sqlContext._// case class在Scala 2.10里面最多支持22个列,,为了突破这个现实,最好是定义一个类实现Product接口 case class Person(name: String, age: Int)// 为Person的对象创建一个RDD,然后注册成一张表 val people = sc.textFile("examples/src/main/resources/people.txt").map(_.split(",")).map(p => Person(p(0), p(1).trim.toInt)) people.registerAsTable("people")// 直接写sql吧,这个方法是sqlContext提供的 val teenagers = sql("SELECT name FROM people WHERE age >= 13 AND age <= 19")// teenagers是SchemaRDDs类型,它支持所有普通的RDD操作 teenagers.map(t => "Name: " + t(0)).collect().foreach(println)
从上面这个方法来看,不是很好用,一个表好几十个字段,我就得一个一个的去赋值,它现在支持的操作都是很简单的操作,想要实现复杂的操作可以具体去看HiveContext提供的HiveQL。
Using Parquet
val sqlContext = new org.apache.spark.sql.SQLContext(sc) import sqlContext._val people: RDD[Person] = ... // 同上面的例子.// 这个RDD已经隐式转换成一个SchemaRDD, 允许它存储成Parquet格式. people.saveAsParquetFile("people.parquet")// 从上面创建的文件里面读取,加载一个Parquet文件的结果也是一种JavaSchemaRDD. val parquetFile = sqlContext.parquetFile("people.parquet")//注册成表,然后使用 parquetFile.registerAsTable("parquetFile") val teenagers = sql("SELECT name FROM parquetFile WHERE age >= 13 AND age <= 19") teenagers.collect().foreach(println)
Writing Language-Integrated Relational Queries
目前这个功能只是在Scala里面支持,挺鸡肋的一个功能
val sqlContext = new org.apache.spark.sql.SQLContext(sc) import sqlContext._ val people: RDD[Person] = ... // 同前面的例子.// 和后面这个语句是一样的 'SELECT name FROM people WHERE age >= 10 AND age <= 19' val teenagers = people.where('age >= 10).where('age <= 19).select('name)
Hive Support
这下面的才是高潮,它可以从hive里面取数据。但是hive的依赖太多了,默认Spark assembly是没带这些依赖的,需要我们运行SPARK_HIVE=true sbt/sbt assembly/assembly重新编译,或者用maven的时候添加-Phive参数,它会重新编译出来一个hive assembly的jar包,然后需要把这个jar包放到所有的节点上。另外还需要把hive-site.xml放到conf目录下。没进行hive部署的话,下面的例子也可以用LocalHiveContext来代替HiveContext。
val sc: SparkContext // 已经存在的SparkContext val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc)// 引入这个Context,然后就会给所有的sql语句进行隐式转换 import hiveContext._hql("CREATE TABLE IF NOT EXISTS src (key INT, value STRING)") hql("LOAD DATA LOCAL INPATH 'examples/src/main/resources/kv1.txt' INTO TABLE src")// 使用HiveQL查询 hql("FROM src SELECT key, value").collect().foreach(println)
这个功能看起来还挺像样,前面两个看起来就像渣一样,没劲儿,不知道为什么不自带那些依赖,还要我们再编译一下,但是我下的那个版本运行的时候提示我已经编译包括了hive的。尼玛,真恶心。
转载于:https://www.cnblogs.com/cenyuhai/p/3763884.html
Spark1.0新特性--Spark SQL相关推荐
- Spark1.2新特性概述
Spark1.2 新特性概述 1.2居然真的在12月份发布了,我表示略感意外,我一直以为稍微跳个票要到明年一月初才能发的.这次更新有172个开发者参与,并且有1000多个commits.这真是一个了不 ...
- PySpark | Spark3新特性 | Spark核心概念
文章目录 一.Spark Shuffle 1. HashShuffleManager 2. SortShuffleManager 3. 总结 二.Spark3.0新特性 1. Adaptive Que ...
- [转]C# 2.0新特性与C# 3.5新特性
C# 2.0新特性与C# 3.5新特性 一.C# 2.0 新特性: 1.泛型List<MyObject> obj_list=new List(); obj_list.Add(new MyO ...
- mysql8.0创建属性,MySQL 8.0新特性 — 管理端口的使用简介
前言 下面这个报错,相信大多数童鞋都遇见过:那么碰到这个问题,我们应该怎么办呢?在MySQL 5.7及之前版本,出现"too many connection"报错,超级用户root ...
- SpringBoot2.0新特性 - Quartz自动化配置集成
https://www.jianshu.com/p/056281e057b3 在新版本的SpringBoot2.0发布后,急迫尝鲜的我将相关的项目已经更换为最新版本,在SpringBoot源码GitH ...
- mysql8.0默认引擎是什么_MySQL8.0新特性【转】
Server层,选项持久化 mysql> show variables like '%max_connections%';+------------------------+-------+ | ...
- Entity Framework Core 2.0 新特性
一.模型级查询过滤器(Model-level query filters) ef core2.0包含了一个新特性,我们叫他模型级查询过滤器(Model-level query filters).此特性 ...
- 浅谈Tuple之C#4.0新特性
一.4.0新特性中的Tuple 大家可以回顾一下c#4.0中增加的一个新特性,元组Tuple,它是一种固定成员的泛型集合: 下面先看看官方的一个使用例子: 创建一个包含7个元素的Tuple数组 // ...
- hadoop3.0新特性介绍
hadoop3.0新特性介绍 1. 基于jdk1.8(最低版本要求) 2. mr采用基于内存的计算,提升性能(快spark 10倍) 3. hdfs 通过最近black块计算,加快数据获取速度(块大小 ...
最新文章
- 推荐8个高质量的小众APP,功能真的惊艳到我了!
- 用命令行CMD .bat 相关操作 如: 创建快捷方式 复制文件等
- python中readline的用法_python中readline的用法
- c++ 读写文本文件
- 2021 大厂实习笔试
- 洛谷 P1308/暂无题解
- 7-19 求链式线性表的倒数第K项 (20 分)(思路分析+极简代码+超容易理解)
- 关于varchar2在pl/sql和schema级别的最大值
- jsp servlet中的过滤器Filter配置总结(转)
- 带你体验云原生场景下 Serverless 应用编程模型
- serialize()与unserialize()
- mysql ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing t
- js控制input控件只能输入数字
- 别乱提交代码了,你必须知道的 Git 分支开发规范!
- 使用PROJ将空间坐标点从WGS84坐标系转换到UTM坐标系
- 【笔记】Ring-DVFS:基于可靠性感知强化学习的DVFS,适用于实时嵌入式系统
- QQ空间、新浪微博、腾讯微博等一键分享API链接代码
- ip rule 命令
- jquery图片3D旋绕效果 rotate3Di的操作
- springCloud-Eureka自我保护模式
热门文章
- erp代码matlab,ERP1 Protocol in Matlab - 源码下载|Windows编程|其他小程序|源代码 - 源码中国...
- vue中页面跳转传值_vue 页面跳转传参
- linux 卷文件满,LVM逻辑卷容量的增减
- mysql怎么绿化绿化_Windows下MySQL的绿化与精简
- java和ajax超时_java – 如何在不重置tomcat的会话超时的情况下执行经过身份验证的AJAX请求?...
- 小明用计算机算出58十35,人教版三年级数学下册第三四单元测试卷.docx
- citrixreceiver云桌面系统_CStack xView桌面云平台与方德操作系统完成兼容性认证
- android用sax解析xml,详解android使用SAX解析XML文件
- 绿米开关如何重置_开个灯还带音效?跟我学简单改装智能开关,保证按上瘾!...
- python将object转换为float_如何在python中将datatype:object转换为float64?