Spark SQL

hive和SparkSQL区别

hive将SQL转为MapReduce   SparkSql可以简单理解将SQL转为RDD+优化在执行

spark处理数据类型

Spark 的 RDD 主要用于处理 非结构化数据 和 半结构化数据 结构化

SparkSQL中的SQL 主要用于处理 结构化数据(较为规范的半结构化数据也可以处理)

DataFrame

DataFrame 是一种以RDD为基础的分布式数据集,类似传统数据库的二维表,DataFrame带有Schema元信息(列名和类型)

即DataFrame所表示的二维表数据集的每一列都带有名称和类型 DataFrame可以从很多数据源构建

总结:DataFrame = RDD —泛型 +Schem+SQL+优化

DataSet

DataSet 可以通过哦JVM的对象进行构建,可以用函数式的转换 (map \flatmap\filter)进行多种操作

DataFrame 就是DataSet[Row]

总结: DataSet =DataFrame+泛型

RDD、DataFrame、DataSet的区别

 

1.RDD[Person]

2.那么DataFrame中的数据长这样 

DataFrame = DataSet[Row] = RDD[Person] - 泛型 + Schema + SQL操作 + 优化

3.那么Dataset中的数据长这样(每行数据是个Object):

Dataset[Person] = DataFrame + 泛型

或者长这样:Dataset[Row]

总结:

DataFrame = RDD - 泛型  +  Schema  + SQL + 优化

DataSet = DataFrame  + 泛型

DataSet  =  RDD   +  Schema  + SQL + 优化

DataFrame = DataSet[Row]

创建DataFrame(以读取TXT为例)

//创建RDD
val lineRDD =sc.textFile("hdfs://node01:8020//test/input/person.txt").map(_.split(" "))
// 定义case class 样例类 相当于schema
case class (id:Int,name:String,age:Int)
//关联schema和RDD
val personDD =lineRDD.map(x =>Person(x(0).toInt,x(1),x(2).toInt))
//将RDD转换成DataFrame
val person =personRDD.toDFS

创建DataSet

1.通过Spark.createDataSet 创建

val  fileRDD =sc.textFile("hdfs://node01:8020/test/input/person.txt")

val ds=spark.createDataset(fileRdd)

ds.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.show

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

两种风格

(1)DSL风格

personDF.select(personDF.col("name")).show
personDF.select(personDF("name")).show
personDF.select(col("name")).show
personDF.select("name").show

(2)SQL风格

personDF.createOrReplaceTempView("t_person")
spark.sql("select * from t_person").show

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值