- 浏览: 599562 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (669)
- oracle (36)
- java (98)
- spring (48)
- UML (2)
- hibernate (10)
- tomcat (7)
- 高性能 (11)
- mysql (25)
- sql (19)
- web (42)
- 数据库设计 (4)
- Nio (6)
- Netty (8)
- Excel (3)
- File (4)
- AOP (1)
- Jetty (1)
- Log4J (4)
- 链表 (1)
- Spring Junit4 (3)
- Autowired Resource (0)
- Jackson (1)
- Javascript (58)
- Spring Cache (2)
- Spring - CXF (2)
- Spring Inject (2)
- 汉字拼音 (3)
- 代理模式 (3)
- Spring事务 (4)
- ActiveMQ (6)
- XML (3)
- Cglib (2)
- Activiti (15)
- 附件问题 (1)
- javaMail (1)
- Thread (19)
- 算法 (6)
- 正则表达式 (3)
- 国际化 (2)
- Json (3)
- EJB (3)
- Struts2 (1)
- Maven (7)
- Mybatis (7)
- Redis (8)
- DWR (1)
- Lucene (2)
- Linux (73)
- 杂谈 (2)
- CSS (13)
- Linux服务篇 (3)
- Kettle (9)
- android (81)
- protocol (2)
- EasyUI (6)
- nginx (2)
- zookeeper (6)
- Hadoop (41)
- cache (7)
- shiro (3)
- HBase (12)
- Hive (8)
- Spark (15)
- Scala (16)
- YARN (3)
- Kafka (5)
- Sqoop (2)
- Pig (3)
- Vue (6)
- sprint boot (19)
- dubbo (2)
- mongodb (2)
最新评论
Spark SQL 作为Apache Spark大数据框架的一部分,主要用于结构化数据处理和对Spark数据执行类SQL的查询。通过Spark SQL,可以针对不同格式的数据执行ETL操作(如JSON,Parquet,数据库)然后完成特定的查询操作。
Spark大数据处理框架目前最新的版本是上个月发布的Spark 1.3。这一版本之前,Spark SQL模块一直处于“Alpha”状态,现在该团队已经从Spark SQL库上将这一标签移除。这一版本中包含了许多新的功能特性,其中一部分如下:
数据框架(DataFrame):Spark新版本中提供了可以作为分布式SQL查询引擎的程序化抽象DataFrame。
数据源(Data Sources):随着数据源API的增加,Spark SQL可以便捷地处理以多种不同格式存储的结构化数据,如Parquet,JSON以及Apache Avro库。
JDBC服务器(JDBC Server):内置的JDBC服务器可以便捷地连接到存储在关系型数据库表中的结构化数据并利用传统的商业智能(BI)工具进行大数据分析。
Spark SQL组件
使用Spark SQL时,最主要的两个组件就是DataFrame和SQLContext。
首先,我们来了解一下DataFrame。
DataFrame
DataFrame是一个分布式的,按照命名列的形式组织的数据集合。DataFrame基于R语言中的data frame概念,与关系型数据库中的数据库表类似。
之前版本的Spark SQL API中的SchemaRDD已经更名为DataFrame。
通过调用将DataFrame的内容作为行RDD(RDD of Rows)返回的rdd方法,可以将DataFrame转换成RDD。
可以通过如下数据源创建DataFrame:
* 已有的RDD
* 结构化数据文件
* JSON数据集
* Hive表
* 外部数据库
SQLContext
Spark SQL提供SQLContext封装Spark中的所有关系型功能。
此外,Spark SQL中的HiveContext可以提供SQLContext所提供功能的超集。可以在用HiveQL解析器编写查询语句以及从Hive表中读取数据时使用。
在Spark程序中使用HiveContext无需既有的Hive环境。
customers.txt
people.txt
dog.txt
输出
除了文本文件之外,也可以从其他数据源中加载数据,如JSON数据文件,Hive表,甚至可以通过JDBC数据源加载关系型数据库表中的数据。
如上所示,Spark SQL提供了十分友好的SQL接口,可以与来自多种不同数据源的数据进行交互,而且所采用的语法也是团队熟知的SQL查询语法。这对于非技术类的项目成员,如数据分析师以及数据库管理员来说,非常实用。
Spark大数据处理框架目前最新的版本是上个月发布的Spark 1.3。这一版本之前,Spark SQL模块一直处于“Alpha”状态,现在该团队已经从Spark SQL库上将这一标签移除。这一版本中包含了许多新的功能特性,其中一部分如下:
数据框架(DataFrame):Spark新版本中提供了可以作为分布式SQL查询引擎的程序化抽象DataFrame。
数据源(Data Sources):随着数据源API的增加,Spark SQL可以便捷地处理以多种不同格式存储的结构化数据,如Parquet,JSON以及Apache Avro库。
JDBC服务器(JDBC Server):内置的JDBC服务器可以便捷地连接到存储在关系型数据库表中的结构化数据并利用传统的商业智能(BI)工具进行大数据分析。
Spark SQL组件
使用Spark SQL时,最主要的两个组件就是DataFrame和SQLContext。
首先,我们来了解一下DataFrame。
DataFrame
DataFrame是一个分布式的,按照命名列的形式组织的数据集合。DataFrame基于R语言中的data frame概念,与关系型数据库中的数据库表类似。
之前版本的Spark SQL API中的SchemaRDD已经更名为DataFrame。
通过调用将DataFrame的内容作为行RDD(RDD of Rows)返回的rdd方法,可以将DataFrame转换成RDD。
可以通过如下数据源创建DataFrame:
* 已有的RDD
* 结构化数据文件
* JSON数据集
* Hive表
* 外部数据库
SQLContext
Spark SQL提供SQLContext封装Spark中的所有关系型功能。
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
此外,Spark SQL中的HiveContext可以提供SQLContext所提供功能的超集。可以在用HiveQL解析器编写查询语句以及从Hive表中读取数据时使用。
在Spark程序中使用HiveContext无需既有的Hive环境。
customers.txt
100, John Smith, Austin, TX, 78727 200, Joe Johnson, Dallas, TX, 75201 300, Bob Jones, Houston, TX, 77028 400, Andy Davis, San Antonio, TX, 78227 500, James Williams, Austin, TX, 78727
import java.sql.DriverManager import org.apache.spark.rdd.JdbcRDD import org.apache.spark.{ SparkContext, SparkConf } import org.apache.spark.sql.Row import org.apache.spark.sql.types.{ IntegerType, StringType, StructField, StructType } object sparkSQL { def main(args: Array[String]): Unit = { val conf = new SparkConf().setAppName("Simple Application").setMaster("local[*]") val sc = new SparkContext(conf) val sqlContext = new org.apache.spark.sql.SQLContext(sc) val people = sc.textFile("i:/4/people.txt") val dog = sc.textFile("i:/4/dog.txt") // 这个 schema 字符类型是字符串 val schemaPeople = "name age" val schemaDog = "name age" // 导入 Row. import org.apache.spark.sql.Row; // 导入 Spark SQL 数据类型 import org.apache.spark.sql.types.{ StructType, StructField, StringType }; // Generate the schema based on the string of schema val sPerson = StructType( schemaPeople.split(" ").map(fieldName => StructField(fieldName, StringType, true))) val sDog = StructType( schemaDog.split(" ").map(fieldName => StructField(fieldName, StringType, true))) // Convert records of the RDD (people) to Rows. val rowRDD = people.map(_.split(",")).map(p => Row(p(0), p(1).trim)) val rowRDD2 = dog.map(_.split(",")).map(p => Row(p(0), p(1).trim)) // Apply the schema to the RDD. val peopleDataFrame = sqlContext.createDataFrame(rowRDD, schemaPerson) val dogDataFrame = sqlContext.createDataFrame(rowRDD2, schemaDog) // 注册DataFrames为表 生成表{people,dog} peopleDataFrame.registerTempTable("people") dogDataFrame.registerTempTable("dog") // SQL语句可以通过使用由sqlContext提供的SQL方法运行。 val results = sqlContext.sql("SELECT p.name,d.name,p.age,d.age FROM people p,dog d where p.age=d.age") // SQL查询的结果是DataFrames支持所有的正常的RDD操作。 results.map(t => "perName: " + t(0)+" dogName: " + t(1) + " perAge:"+ t(2)+ " dogAge:"+ t(3)).collect().foreach(println) } }
people.txt
aaa,11 bbb,22 ccc,33 ddd,44
dog.txt
eee,11 fff,22 ggg,33 ddd,44
输出
perName: aaa dogName: eee perAge:11 dogAge:11 perName: bbb dogName: fff perAge:22 dogAge:22 perName: ccc dogName: ggg perAge:33 dogAge:33 perName: ddd dogName: ddd perAge:44 dogAge:44
// // 用编程的方式指定模式 // // 用已有的Spark Context对象创建SQLContext对象 val sqlContext = new org.apache.spark.sql.SQLContext(sc) // 创建RDD对象 val rddCustomers = sc.textFile("data/customers.txt") // 用字符串编码模式 val schemaString = "customer_id name city state zip_code" // 导入Spark SQL数据类型和Row import org.apache.spark.sql._ import org.apache.spark.sql.types._; // 用模式字符串生成模式对象 val schema = StructType(schemaString.split(" ").map(fieldName => StructField(fieldName, StringType, true))) // 将RDD(rddCustomers)记录转化成Row。 val rowRDD = rddCustomers.map(_.split(",")).map(p => Row(p(0).trim,p(1),p(2),p(3),p(4))) // 将模式应用于RDD对象。 val dfCustomers = sqlContext.createDataFrame(rowRDD, schema) // 将DataFrame注册为表 dfCustomers.registerTempTable("customers") // 用sqlContext对象提供的sql方法执行SQL语句。 val custNames = sqlContext.sql("SELECT name FROM customers") // SQL查询的返回结果为DataFrame对象,支持所有通用的RDD操作。 // 可以按照顺序访问结果行的各个列。 custNames.map(t => "Name: " + t(0)).collect().foreach(println) // 用sqlContext对象提供的sql方法执行SQL语句。 val customersByCity = sqlContext.sql("SELECT name,zip_code FROM customers ORDER BY zip_code") // SQL查询的返回结果为DataFrame对象,支持所有通用的RDD操作。 // 可以按照顺序访问结果行的各个列。 customersByCity.map(t => t(0) + "," + t(1)).collect().foreach(println)
除了文本文件之外,也可以从其他数据源中加载数据,如JSON数据文件,Hive表,甚至可以通过JDBC数据源加载关系型数据库表中的数据。
如上所示,Spark SQL提供了十分友好的SQL接口,可以与来自多种不同数据源的数据进行交互,而且所采用的语法也是团队熟知的SQL查询语法。这对于非技术类的项目成员,如数据分析师以及数据库管理员来说,非常实用。
发表评论
文章已被作者锁定,不允许评论。
-
Spark 会把数据都载入到内存吗
2017-06-01 10:14 819前言 很多初学者其实对Spark的编程模式还是RDD这个概念理 ... -
Spark Driver和Executor资源调度学习
2017-05-31 16:14 979一、引子 在Worker Actor中,每次LaunchE ... -
Spark 实现TopN的问题(groupBy)
2017-05-31 14:11 1404t2.txt ab 11 ab 23 ab 13 a ... -
Spark block和partition的区别
2017-05-31 13:48 978hdfs中的block是分布式存储的最小单元,类似于盛放文件的 ... -
Spark 什么是DAG(有向无环图)(窄依赖和宽依赖)
2017-05-26 16:46 2155在Spark里每一个操作生成一个RDD,RDD之间连一条边,最 ... -
Spark 为什么比Hadoop快
2017-05-25 16:12 1337Spark SQL比Hadoop Hive快, ... -
Spark 集群的搭建(1.6.3)
2017-05-24 10:41 8参考内容:http://www.cnblogs.com/one ... -
Spark shuffle实现详细探究学习
2017-04-28 15:08 573Background 在MapReduce框架中,shuffl ... -
Spark collect和take函数学习(RDD-->Array)
2017-04-27 15:44 2109将RDD转成Scala数组,并返回。 函数原型 def ... -
Spark MLlib平台的协同过滤算法---电影推荐系统学习
2017-04-27 15:33 627import org.apache.log4j.{Level, ... -
Spark parallelize函数和makeRDD函数的区别(Array-->RDD)
2017-04-27 14:56 833我们知道,在Spark中创建RDD的创建方式大概可以分为三种: ... -
Spark Streaming实时计算学习
2017-04-27 10:31 943随着大数据的发展,人们对大数据的处理要求也越来越高,原有的批处 ... -
Spark 集群的搭建学习(1.6.3)
2017-04-25 14:30 788Spark是一个快速、通用的计算集群框架,它的内核使用Scal ... -
Spark RDD基于内存的集群计算容错抽象(核心概念)
2017-04-11 20:09 675摘要 本文提出了分布 ... -
Spark 入门知识学习
2017-04-08 11:46 406什么是Spark Apache Spark是 ...
相关推荐
在本项目中,ANTLR4被用来创建一个解析器,这个解析器支持多种SQL方言,包括Spark SQL、TiDB SQL以及Flink SQL,同时还支持Spark和Flink的运行命令解析。 Spark SQL是Apache Spark的一个组件,主要负责处理结构化的...
### Spark SQL 学习笔记知识点总结 #### 一、Spark SQL 概述 - **定义**:Spark SQL 是 Apache Spark 的一个模块,用于处理结构化数据。它提供了 DataFrame 和 Dataset API,以及支持 SQL 查询的能力。这些特性...
本示例将详细介绍如何使用 Spark 从 HBase 中读取数据,并通过 Spark SQL 将其存储到 MySQL 数据库中。 首先,让我们了解 Spark 与 HBase 的交互。Spark 提供了 `spark-hbase-connector` 库,允许我们方便地连接到 ...
总结来说,Spark2官方示例源代码为学习Spark提供了一个很好的起点,涵盖了从基础操作到高级特性的各个方面,有助于开发者快速上手并深入理解Spark的强大功能。通过这些示例,你不仅可以学习如何使用Spark,还可以...
在提供的"src"目录中,可能包含示例代码和自定义函数,这些可以帮助我们了解如何在实际项目中应用Spark SQL。"data"目录则可能包含了用于演示的样本数据集,我们可以利用这些数据运行查询和实验,加深对Spark SQL的...
它支持批处理、交互式查询(Spark SQL)、实时流处理(Spark Streaming)和机器学习(MLlib)。Spark的工作原理是将数据加载到内存中,进行多轮迭代计算,从而显著提高处理速度。 ### Kafka基础知识 Kafka是由...
在大数据处理领域,Spark SQL是Apache Spark项目中的一个重要组件,它提供了一种高效且易于使用的接口来查询和处理大规模数据。Spark SQL集成了SQL查询语言,使得开发人员能够使用SQL或者DataFrame API对数据进行...
这个示例展示了如何使用 Spark SQL 处理和分析数据,从读取文件到执行 SQL 查询,再到打印结果,整个过程都是在 Spark 的分布式环境中进行的。在 Spark SQL 中,数据被表示为 DataFrame 或 Dataset,这些数据结构...
Spark SQL是Apache Spark的一个模块,用于处理结构化数据。它提供了SQL查询语言的接口,可以访问多种数据源。从2014年4月发布的Spark 1.0版本开始,Spark SQL就成为了Spark核心分布包的一部分,并在2015年从Alpha...
而DataFrame和Dataset是Spark SQL中更高级的数据抽象,提供了更多的优化和易于使用的特点。Dataframe可以看作是具有模式信息的分布式数据集。Dataset是类型安全的DataFrame。 在本文中,将详细介绍Spark的RDD API,...
官方示例涵盖了Spark的主要组件和功能,包括基本操作、数据处理、SQL查询、流处理、图计算和机器学习等。通过这些示例,我们可以: 1. **理解基本操作**:如读写文件、数据过滤和转换等,了解Spark API的使用方法。...
这个"Spark学习示例"包含了官方提供的示例程序,是初学者掌握Spark技术的绝佳资源。以下将对Spark的一些核心概念和相关知识点进行详细阐述。 1. Spark的基本架构: Spark的核心组件是弹性分布式数据集(Resilient ...
通过学习和实践这些示例,你可以了解到如何在Hadoop和Spark环境下搭建和运行机器学习项目,理解如何利用这两个强大的工具进行数据处理、特征提取、模型训练和验证。这不仅有助于提升大数据处理技能,还能为未来的...
《藏经阁-GeoMesa on Spark SQL》的文件主要探讨了如何利用GeoMesa工具与Spark SQL结合,从数据中提取地理位置智能(Location Intelligence)。GeoMesa是开源的地理空间数据存储系统,它能够处理大规模的空间数据,...
### 大数据技术分享:Spark SQL自适应执行与大规模集群优化 #### 一、引言 随着大数据时代的到来,如何高效地处理海量数据成为企业和研究机构关注的重点。Apache Spark作为一款开源的大数据处理框架,凭借其高效的...
这是一个基于Scala语言开发的Spark RDD、Spark SQL、Spark Streaming相关Demo,包含35个文件。主要文件类型包括29个Scala...该项目提供了Spark中RDD、SQL和Streaming的相关示例,适合用于学习和实践Spark编程技术。
- 01_尚硅谷大数据技术之Spark基础解析.docx提供Spark的入门知识,包括安装部署、基本操作和简单的数据分析示例。 - OverFunction.scala可能是某个自定义函数的示例代码,展示了如何在Spark中编写和使用用户定义的...
### Spark SQL介绍:外部数据源API与Hive支持详解 #### 外部数据源API 在Spark SQL 1.2版本中,一个重要的更新是引入了外部数据源API(External Data Source API)。这一API允许开发者定义新的输入源,极大地增强...