什么是Spark SQL
Spark SQL是spark处理结构化数据的一个模块,它提供了两个编程抽象:DataFrame和DataSet,并作为分布式sql的查询引擎
hive的工作原理是将任务转化 成MR,而Spark SQL是将Spark SQL转化成RDD,然后提交集群执行,效率高
Spark SQL 的特点
1.易整合
2.统一的数据访问方式
3.兼容hive
4.标准的数据连接
什么是DataFrame
DataFrame和RDD类似,也是一个分布式数据容器,DataFrame可以体现出数据存放的类型是什么,DataFrame也是懒执行
DataFrame性能比RDD高的原因
DataSet
Spark SQL命令
SparkSession
SparkSession是spark最新的sql查找起点,它是由SQLContext和HiveContext组合而成
创建SparkSession对象:
import org.apache.spark.sql.SparkSession
val spark=SparkSession.builder().getOrCreate()
读取数据创建DataFrame
var df=spark.read.json("file:///home/hduser/software/spark-2.1.1/examples/src/main/resources/people.json")
展示结果
df.show
SQL风格语法
//创建一个临时表people
df.createOrReplaceTempView("people")
//查询全表
var sprdf=spark.sql("select * from people")
注:临时表时Session范围中的,Session退出之后表就失效了。
//创建全局表
df.createGlobalTempView("people")
//查询局表
spark.sql("select * from global_temp.people").show()
//创建临时Session查表
spark.new Session().sql("select * from global_temp.people").show()
DSL风格语法
1)创建一个DataFrame
var df = spark.read.json(“file://路径”)
2)查看DataFrame的Schema信息
df.printSchema
3)只查看“name”
df.select(df(“name”)).show()
4)查看“name”和“age+1”
df.select(df(“name”),df(“age”)+1).show()
RDD转化成DataFrame
方法一
导包:
import spark.implicits._
import org.apache.spark.sql.catalyst.encoders.ExpressionEncoder
import org.apache.spark.sql.Encoder
1)创建RDD
var a=sc.textFile("file://路径")
2)切割RDD
var b=a.map(_.split(","))
3)创建样例类
case class Person(name:String,age:int)
4)创建样例对象类的RDD
var c=b.map(line => Person(line(0),line(1).toInt))
5)RDD转化成DataFrame
var df = c.toDF
6)创建视图
df.createOrReplaceTempView("people")
7)用sql语句查询
spark.sql("select * from people")
方法二
1)创建RDD
var a= sc.textFile(“file://路径”)
2)切分RDD
var b=a.map(_.split(","))
3)创建Row对象的RDD
var c= b.map(line=>Row(line(0),line(1).toInt))
4)创建DataFrame元数据
var structType=StructType(Array(
StructField(“name”,StringType,true),
StructField(“age”,IntegerType,true)
))
5)将RDD转化成DataFrame
val df = spark.createDataFrame(c,structType)
6)创建视图
df.createOrReplaceTempView(“people”)
7)用sql查询
spark.sql(“select * from people”)