SparkSQL编程指南之Java篇一-入门
来源:互联网 发布:mac python版本 编辑:程序博客网 时间:2024/06/05 16:55
1. Spark SQL的Java开发包
Spark SQL提供Java的开发包,当前最新版本是2.1.0版本:spark-sql_2.11-2.1.0.jar,可以从下面链接下载:
http://central.maven.org/maven2/org/apache/spark/spark-sql_2.11/2.1.0/spark-sql_2.11-2.1.0.jar
或者通过Maven配置:
* Spark 2.1.0版本需要Java 7或以上,本文使用Java 1.8.0_72版本
2. SparkSession
创建一个基本的SparkSession,只要使用SparkSession.builder(),它是使用所有Spark SQL功能的入口点:
* 必须调用master(String master)方法指定主节点URL,本例使用local[*],表示本机多线程,线程数与服务器核数相同,具体请参考以下链接:
http://spark.apache.org/docs/latest/submitting-applications.html#master-urls
* 如果没有指定主节点URL的话,运行时会遇到以下错误:
Spark 2.0版本开始,SparkSession内置支持Hive的特性,包括使用HiveQL进行写查询,访问Hive的UDFs和从Hive表读取数据,不需要部署一个Hive的环境。
3. 创建DataFrames
使用SparkSession可以通过一个RDD、Hive表或者Spark数据源创建DataFrames,例如以下代码通过读取一个JSON文件创建一个DataFrame,然后调用show()方法显示内容:
4. 非类型化数据集操作(DataFrame操作)
DataFrames提供了Scala、Java、Python和R语言对结构化数据的操作。以下是一些使用Datasets对结构化数据进行处理的基本例子:
5. 以编程方式运行SQL查询
SparkSession的sql方法能够以编程方式运行SQL查询并返回Dataset<Row>。
例如以下例子:
6. 全局临时视图
Spark SQL的临时视图是当前session有效的,也就是视图会与创建该视图的session终止而失效。如果需要一个跨session而且一直有效的直到Spark应用终止才失效的临时视图,可以使用全局临时视图。全局临时视图是与系统保留数据库global_temp绑定,所以使用的时候必须使用该名字去引用,例如,SELECT * FROM global_temp.view1。
7. 创建Datasets
Datasets类似于RDDs,然而,Datasets使用了一个专门的编码器Encoder来序列化对象而不是使用Java的序列化或Kryo。这些专门的编码器使用的格式允许Spark执行像过滤filtering、排序sorting和哈希hashing等操作而不需要把对象反序列化成字节。
8. Datasets与RDDs的相互转换
Spark SQL支持2种不同的方法把RDDs转换为Datasets。第一种是使用反射获取RDD的Schema,当知道schema的时候,使用基于反射的方法会让代码更加简明而且效果也更好。第二种是通过编程接口指定schema,这种方法会使代码冗长,但是可以在运行时才知道数据列以及其类型的情况下事先构造Datasets。
8.1 使用反射获取Schema
Spark SQL支持将JavaBean的RDD自动转换成DataFrame。目前的Spark SQL版本不支持包含Map field(s)的JavaBeans,但嵌套的JavaBeans和List或者Array fields是支持的。可以通过创建一个实现Serializable接口和包含所有fields的getters和setters方法的类来创建一个JavaBean。
8.2 通过编程接口指定Schema
当JavaBean不能被事先定义的时候,通过编程创建Dataset<Row>需要三个步骤:
* 参考Spark SQL官方链接:http://spark.apache.org/docs/latest/sql-programming-guide.html#getting-started
TO BE CONTINUED...O(∩_∩)O
Spark SQL提供Java的开发包,当前最新版本是2.1.0版本:spark-sql_2.11-2.1.0.jar,可以从下面链接下载:
http://central.maven.org/maven2/org/apache/spark/spark-sql_2.11/2.1.0/spark-sql_2.11-2.1.0.jar
或者通过Maven配置:
* Spark 2.1.0版本需要Java 7或以上,本文使用Java 1.8.0_72版本
2. SparkSession
创建一个基本的SparkSession,只要使用SparkSession.builder(),它是使用所有Spark SQL功能的入口点:
* 必须调用master(String master)方法指定主节点URL,本例使用local[*],表示本机多线程,线程数与服务器核数相同,具体请参考以下链接:
http://spark.apache.org/docs/latest/submitting-applications.html#master-urls
* 如果没有指定主节点URL的话,运行时会遇到以下错误:
Spark 2.0版本开始,SparkSession内置支持Hive的特性,包括使用HiveQL进行写查询,访问Hive的UDFs和从Hive表读取数据,不需要部署一个Hive的环境。
3. 创建DataFrames
使用SparkSession可以通过一个RDD、Hive表或者Spark数据源创建DataFrames,例如以下代码通过读取一个JSON文件创建一个DataFrame,然后调用show()方法显示内容:
4. 非类型化数据集操作(DataFrame操作)
DataFrames提供了Scala、Java、Python和R语言对结构化数据的操作。以下是一些使用Datasets对结构化数据进行处理的基本例子:
5. 以编程方式运行SQL查询
SparkSession的sql方法能够以编程方式运行SQL查询并返回Dataset<Row>。
例如以下例子:
6. 全局临时视图
Spark SQL的临时视图是当前session有效的,也就是视图会与创建该视图的session终止而失效。如果需要一个跨session而且一直有效的直到Spark应用终止才失效的临时视图,可以使用全局临时视图。全局临时视图是与系统保留数据库global_temp绑定,所以使用的时候必须使用该名字去引用,例如,SELECT * FROM global_temp.view1。
7. 创建Datasets
Datasets类似于RDDs,然而,Datasets使用了一个专门的编码器Encoder来序列化对象而不是使用Java的序列化或Kryo。这些专门的编码器使用的格式允许Spark执行像过滤filtering、排序sorting和哈希hashing等操作而不需要把对象反序列化成字节。
8. Datasets与RDDs的相互转换
Spark SQL支持2种不同的方法把RDDs转换为Datasets。第一种是使用反射获取RDD的Schema,当知道schema的时候,使用基于反射的方法会让代码更加简明而且效果也更好。第二种是通过编程接口指定schema,这种方法会使代码冗长,但是可以在运行时才知道数据列以及其类型的情况下事先构造Datasets。
8.1 使用反射获取Schema
Spark SQL支持将JavaBean的RDD自动转换成DataFrame。目前的Spark SQL版本不支持包含Map field(s)的JavaBeans,但嵌套的JavaBeans和List或者Array fields是支持的。可以通过创建一个实现Serializable接口和包含所有fields的getters和setters方法的类来创建一个JavaBean。
8.2 通过编程接口指定Schema
当JavaBean不能被事先定义的时候,通过编程创建Dataset<Row>需要三个步骤:
- 通过原来的RDD创建一个Rows格式的RDD
- 创建以StructType表现的schema,该StructType与步骤1创建的Rows结构RDD相匹配
- 通过SparkSession的createDataFrame方法对Rows格式的RDD指定schema
* 参考Spark SQL官方链接:http://spark.apache.org/docs/latest/sql-programming-guide.html#getting-started
TO BE CONTINUED...O(∩_∩)O
阅读全文
0 0
- SparkSQL编程指南之Java篇一-入门
- SparkSQL编程指南之Java篇一-入门
- SparkSQL编程指南之Java篇二-数据源(上)
- SparkSQL编程指南之Java篇三-数据源(下)
- Spark编程指南入门之Java篇一-基本知识
- Spark编程指南入门之Java篇一-基本知识
- Spark编程指南入门之Java篇一-基本知识
- Spark编程指南入门之Java篇二-基本操作
- Spark编程指南入门之Java篇七-共享变量
- Spark编程指南入门之Java篇二-基本操作
- Spark编程指南入门之Java篇二-基本操作
- 软件编程入门指南(一)
- Java入门之编程基础(一)
- Spark编程指南入门之Java篇三-常用Transformations操作
- Spark编程指南入门之Java篇四-常用Actions操作
- Spark编程指南入门之Java篇五-数据重组Shuffle介绍
- Spark编程指南入门之Java篇六-RDD持久化介绍
- Spark中文指南(入门篇)-Spark编程模型(一)
- C 共用体
- 基于Lucene对少量新闻(5000篇左右)应用TFIDF方法进行关键字抽取与建立索引、检索
- 在TensorFlow中对比两大生成模型:VAE与GAN(附测试代码)
- 中小卖家电商节恐惧症:你们剁手,我们割肉 2017-10-27 09:00 稿源:懂懂笔记 0条评论 撤稿纠错 “其实对一部分我们这样的中小卖家来说,造节就是煎熬。” 在某大型电商平台上拥有两家
- 【第1094期】图与例解读Async/Await
- SparkSQL编程指南之Java篇一-入门
- 挑战程序设计竞赛 算法和数据结构 第3章 初等排序
- 前端性能优化的关键时间点,你了解吗?
- python3 json 模块
- 在网吧写代码是怎样一种体验?
- 机器学习基础02-数理统计与参数估计
- Codeforces 742A. Arpa’s hard exam and Mehrdad’s naive cheat
- Java 反射机制详解
- 算法精解_C语言 链表_单链表(接口定义+类型实现)