介绍
shark是sparksql的前身,sparkSql解决的是脱离Hive的限制。
作用:1,支持查询原生的RDD,RDD是spark的核心概念,是spark能够高效处理大数据各种场景的基础。
2,能够在scala/java中写sql语句,支持简单的sql语法查询,能够在SQL中写Hive语句访问Hive数据,并将结果取回作为RDD使用。
spark on hive:hive储存,spark,sql解析,优化和执行
hive on spark:hive储存和sql的解析优化,spark执行
dataSet:分布式数据容器。与RDD类似,但是更像数据库中的二维表格,处理数据还掌握结构信息,比如schema.同时,与Hive类似,Dataset也支持嵌套数据类型(struct、array和map)。从API易用性的角度上 看,Dataset API提供的是一套高层的关系操作,比函数式的RDD API要更加友好,门槛更低。Dataset的底层封装的是RDD,当RDD的泛型是Row类型的时候,我们也可以称它为DataFrame(Dataset<Row> = DataFrame)。
sparkSql的数据源:json类型的字符串,JDBC(数据库),parquet,Hive,HDFS
SparkSQL底层架构:1,拿到sql后解析一批未被解决的逻辑计划。2,分析得到分析后的逻辑计划,再经过一批优化规则转换成一批最佳优化的逻辑计划。3,经过SparkPlanner的策略转化为一批物理计划4,经过消费模型转换成一个个的spark任务执行。
创建DataSet的几种方式
1,json格式的文件:
注意:json文件中的json数据不能嵌套json格式的数据
Dataset是一个一个Row类型的RDD,ds.rdd()/ds.javaRDD()
2,json格式的RDD
3,非json格式的RDD
4,读取parquet文件
5,读取JDBC中的数据