SparkSql

SparkSQL基本介绍

什么是SparkSQL?
用于处理结构化数据的Spark模块。
可以通过DataFrame和DataSet处理数据。

SparkSQL特点
1、易整合
可以使用java、scala、python、R等语言的API操作。
2、统一的数据访问
连接到任何数据源的方式相同。
3、兼容Hive
4、标准的数据连接(JDBC/ODBC)

SQL优缺点
优点:表达非常清晰,难度低、易学习。
缺点:复杂的业务需要复杂的SQL, 复杂分析,SQL嵌套较多。机器学习较难实现。

Hive和SparkSQL的对比
Hive是将sql转化成MapReduce进行计算
SparkSQL是将sql转化成rdd集进行计算

SparkSQL中的两个抽象

什么RDD??
弹性分布式数据集。

DataFrame
什么是DataFrame??
DataFrame是以RDD为基础的带有元信息的分布式数据集。
(DataFrame=Schema+RDD*n)

什么是DataSet??
含有类型信息的DataFrame就是DataSet
(DataSaet=DataFrame+类型= Schema+RDD*n+类型)
DataSet包含了DataFrame的功能

Spark初体验

SparkSQL驱动为SparkSession
SparkSession可以执行SparkSQL也可以执行HiveSQL
//读取数据
val lineRDD= sc.textFile(“hdfs://node01:8020/tt.txt”).map(_.split(" "))
//实例样例类(类似于表的结构)
case class Person(id:Int, name:String, age:Int)
//遍历数据,将数据填充到样例类中
val personRDD = lineRDD.map(x => Person(x(0).toInt, x(1), x(2).toInt))
//将RDD转换成DataFrame
val personDF = personRDD.toDF
//查看数据
personDF.show
//输出表结构
personDF.printSchema
//将DataFrame注册为张表
personDF.createOrReplaceTempView(“t_person”)
//通过SQL语句进行查询
spark.sql(“select id,name from t_person where id > 3”).show

使用SparkSession对象(spark)直接读取数据,读取文本文件是没有元数据信息,读取json文件有元数据信息。

创建DataSet
1.通过spark.createDataset创建Dataset
val fileRdd = sc.textFile(“hdfs://node01:8020/person.txt”) //RDD[String]
val ds1 = spark.createDataset(fileRdd) //DataSet[String]
ds1.show

2.通RDD.toDS方法生成DataSet

case class Person(name:String, age:Int)
val data = List(Person(“zhangsan”,20),Person(“lisi”,30)) //List[Person]
val dataRDD = sc.makeRDD(data)
val ds2 = dataRDD.toDS //Dataset[Person]
ds2.showS
3.通过DataFrame.as[泛型]转化生成DataSet
case class Person(name:String, age:Long)
val jsonDF= spark.read.json(“file:///export/servers/spark/examples/src/main/resources/people.json”)
val jsonDS = jsonDF.as[Person] //DataSet[Person]
jsonDS.show

SparkSQL查询数据的形态
1、类似方法调用,领域特定语言(DSL)。
准备数据
val lineRDD= sc.textFile(“hdfs://node01:8020/tt.txt”).map(_.split(" "))
case class Person(id:Int, name:String, age:Int)
val personRDD = lineRDD.map(x => Person(x(0).toInt, x(1), x(2).toInt))
val personDF = personRDD.toDF
personDF.show
查询
personDF.select(“id”,“name”,“age”).show
personDF.select( " i d " , "id",

你可能感兴趣的:(spark,sparksql)