DataFrame编程模型初谈与Spark SQL
Spark SQL在Spark内核基础上提供了对结构化数据的处理,在Spark1.3版本中,Spark SQL不仅可以作为分布式的SQL查询引擎,还引入了新的DataFrame编程模型。
在Spark1.3版本中,Spark SQL不再是Alpha版本,除了提供更好的SQL标准兼容之外,还引进了新的组件DataFrame。同时,Spark SQL数据源API也实现了与新组件DataFrame的交互,允许用户直接通过Hive表、Parquet文件以及一些其他数据源生成DataFrame。用户可以在同一个数据集上混合使用SQL和DataFrame操作符。新版本还提供了从JDBC读写表的能力,可以更原生地支持Postgres、MySQL及其他RDBMS系统。
Spark SQL所有功能的入口点是SQLContext,或它的一个子类。只需要一个SparkContext实例就可以构建一个基本的SQLContext。

package cn.spark.study.sql
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.sql.SQLContext
/**
* @author Administrator
*/
object DataFrameCreate {
def main(args: Array[String]) {
val conf = new SparkConf()
.setAppName("DataFrameCreate")
.setMaster("local");
val sc = new SparkContext(conf)
val sqlContext = new SQLContext(sc)
// val df = sqlContext.read.json("hdfs://spark1:9000/students.json")//从hdfs
// val df = sqlContext.read.json("./data/people.json")
val df = sqlContext.read.json("./data/aa.json")
//Spark DataFrame小试牛刀,见https://segmentfault.com/a/1190000002614456
//Spark DataFrames入门指南:创建和操作DataFrame,见http://blog.csdn.net/lw_ghy/article/details/51480358
//创建dataframe ,就是把数据 和数据元封装一起 形成一个数据表。
//spark DataFrame用法,见http://blog.csdn.net/dreamer2020/article/details/51284789
//RDD与DataFrame的转换,见http://www.cnblogs.com/namhwik/p/5967910.html
df.show()
}
}
//输入
//{"name":"Michael"}
//{"name":"Andy", "age":30}
//{"name":"Justin", "age":19}
//输出
//+----+-------+
//| age| name|
//+----+-------+
//|null|Michael|
//| 30| Andy|
//| 19| Justin|
//+----+-------+
//输入
//{"name":"中国","provinces":[{"name":"黑龙江","citys":["佳木斯","大庆","哈尔滨","齐齐哈尔","牡丹江"]},{"name":"辽宁","citys":["沈阳","大连","盘锦"]},{"name":"吉林","citys":["吉林市","长春市","四平市"]}]}
//输出
//+----+--------------------+
//|name| provinces|
//+----+--------------------+
//| 中国|[[WrappedArray(佳木...|
//+----+--------------------+
再次强调,spark-shell除了帮我们构建了SQLContext实例外,还帮我们导入了隐式转换:import sqlContext.implicits._。在以spark-submit方式提交的应用程序中,需要手动导入该隐式转换才能访问某些API。
DataFrame编程模型极大地简化了Spark SQL的编程复杂度。
Spark SQL允许Spark执行用SQL语言,HiveQL语言或者Scala语言表示的关系查询。在Spark1.3之前,这个模块的核心是SchemaRDD类型。SchemaRDD由行(Row)对象组成,行对象通过scheme来描述行中每一列的数据类型。
而在Spark1.3中,开始引入了DataFrame来重命名SchemaRDD类型,在Spark1.3中,DataFrame是一个以命名列方式组织的分布式数据集,在概念上类似于关系型数据库中的一个表,也相当于R/Python中的Dta Frames。DataFrame可以由结构化数据文件转换得到,或从Hive中的表得来,也可以转换自外部数据库或现有的RDD。
DataFrame编程模型具有的功能特性有:
1、从KB到PB级的数据量支持
2、多种数据格式和多种存储系统支持
3、通过Spark SQL的Catalyst优化器进行先进的优化,生成代码
4、位Python、Java、Scala和R语言(Spark R)提供API。
DataFrame编程模型初谈与Spark SQL的更多相关文章
- Spark SQL 编程API入门系列之Spark SQL支持的API
不多说,直接上干货! Spark SQL支持的API SQL DataFrame(推荐方式,也能执行SQL) Dataset(还在发展) SQL SQL 支持basic SQL syntax/Hive ...
- Spark SQL 编程API入门系列之Spark SQL的作用与使用方式
不多说,直接上干货! Spark程序中使用SparkSQL 轻松读取数据并使用SQL 查询,同时还能把这一过程和普通的Python/Java/Scala 程序代码结合在一起. CLI---Spark ...
- DataFlow编程模型与Spark Structured streaming
流式(streaming)和批量( batch):流式数据,实际上更准确的说法应该是unbounded data(processing),也就是无边界的连续的数据的处理:对应的批量计算,更准确的说法是 ...
- Spark SQL 之 DataFrame
Spark SQL 之 DataFrame 转载请注明出处:http://www.cnblogs.com/BYRans/ 概述(Overview) Spark SQL是Spark的一个组件,用于结构化 ...
- 【转载】Spark SQL 1.3.0 DataFrame介绍、使用
http://www.aboutyun.com/forum.php?mod=viewthread&tid=12358&page=1 1.DataFrame是什么?2.如何创建DataF ...
- spark结构化数据处理:Spark SQL、DataFrame和Dataset
本文讲解Spark的结构化数据处理,主要包括:Spark SQL.DataFrame.Dataset以及Spark SQL服务等相关内容.本文主要讲解Spark 1.6.x的结构化数据处理相关东东,但 ...
- 转】Spark SQL 之 DataFrame
原博文出自于: http://www.cnblogs.com/BYRans/p/5003029.html 感谢! Spark SQL 之 DataFrame 转载请注明出处:http://www.cn ...
- Spark SQL 编程API入门系列之SparkSQL数据源
不多说,直接上干货! SparkSQL数据源:从各种数据源创建DataFrame 因为 spark sql,dataframe,datasets 都是共用 spark sql 这个库的,三者共享同样的 ...
- Spark SQL 官方文档-中文翻译
Spark SQL 官方文档-中文翻译 Spark版本:Spark 1.5.2 转载请注明出处:http://www.cnblogs.com/BYRans/ 1 概述(Overview) 2 Data ...
随机推荐
- 【OpenCV, MFC】利用MFC和OpenCV通过系统对话框打开和保存图片
打开图片: void CImageProDlg::OnImageopen() { // TODO: 在此添加命令处理程序代码 Invalidate(); CFileDialog dlg(TRUE, N ...
- mongodb local数据库的空间初始化好大啊!
新建立了一个replicat set,登录到primary里,show dbs一看吓一跳 local数据库竟然占用了80多G的空间 [root@wxlab31 bin]# ./mongo --host ...
- 在DJANGO中如何定义get_absolute_url
有好几种办法呢... 书上有说: 常见的: class Image(models.Model): user = models.ForeignKey(settings.AUTH_USER_MODEL, ...
- Mysql优化和执行计划
SQL优化准则 禁用select * 使用select count(*) 统计行数 尽量少运算 尽量避免全表扫描,如果可以,在过滤列建立索引 尽量避免在where子句对字段进行null判断 尽量避免在 ...
- 洛谷—— P2196 挖地雷
https://www.luogu.org/problem/show?pid=2196 题目背景 NOIp1996提高组第三题 题目描述 在一个地图上有N个地窖(N<=20),每个地窖中埋有一定 ...
- zoj——1202 Divide and Count
Divide and Count Time Limit: 2 Seconds Memory Limit: 65536 KB Jack has several beautiful diamon ...
- JAVA之中出现无法加载主类的情况解决方法
j今天打代码的时候出现了无法加载主类的情况,我就收集了一些,java无法加载主类的方法 ava无法加载主类解决办法 今天启动项目,又遇到找不到或无法加载主类的情况,清除项目后无法编译,class文件下 ...
- CString、char*与string的区别
三者的区别 CString 是MFC或者ATL中的实现: string 是C++标准库中的实现: char* 为C编程中最常用的字符串指针,一般以’\0’为结束标志. string和CString均是 ...
- NYOJ 16 矩形嵌套 (DAG上的DP)
矩形嵌套 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描写叙述 有n个矩形,每个矩形能够用a,b来描写叙述.表示长和宽.矩形X(a,b)能够嵌套在矩形Y(c,d)中当且仅当 ...
- HDU2082 找单词 【母函数】
找单词 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...