一、Spark SQL概述
1、Spark SQL是spark用来处理结构化数据的一个模块,它提供了一个编程抽象叫做DataFrame并且作为分布式SQL查询引擎的作用。
2、在学习Hive的过程中,我们了解到它是将Hive SQL 转换成MapReduce然后提交到集群上执行,大大简化了编写MapReduce的程序的复杂性,由于MapReduce计算过程中大量的中间磁盘落地过程消耗了大量的I/O,降低运行效率。因此Spark SQL就诞生出来,它是将Spark SQL转换成RDD,然后提交到集群执行,并且执行效率非常快。
二、是DataFrame概述
与RDD类似,DataFrame也是一个分布式数据容器。然而DataFrame更像传统的二维表格,除了数据以外,还记录数据的结构信息,即schema。同事,与Hive类似,DataFrame也支持嵌套数据类型(struct、array、map)。从API易用性的角度上看,DataFrame API提供的是一套高层关系操作,比函数式的RDD API要更加友好,门槛更低。
三、创建DataFrame
Spark SQL中SQLContext是创建DataFrame和执行SQL的入口,在spark-1.5.2中已经内置一个sqlContext
1、本地创建一个文件,有三列分别是id、name、age用空格分隔,然后上传到hdfs上
hadoop fs -put person.txt
2、在spark shell 执行下面命令,读取数据,将每一行的数据使用分隔符分割
val lineRDD = sc.textFiel("hdfs://localhost:8020/person.txt").map(_.split(" "))
3、定义一个case class (相当于表的schema)
case class Person(id: Int, name: String, age: Int)
4、将RDD和case class关联