大数据学习(28)—— Spark SQL
先来看个例子。
准备一个json文件student.json,这不是一个标准的json格式。spark不支持原始的json,只能是一行一条记录。
{"name": "zhangsan", "age":20, "address": "beijing" }
{"name": "lisi", "age":21, "address": "shanghai" }
开始spark读取json的表演,非常简单。
val dataFrame = spark.read.json("resource/student.json")
dataFrame.show()
输出结果:
+--------+---+--------+ | address|age| name| +--------+---+--------+ | beijing| 20|zhangsan| |shanghai| 21| lisi| +--------+---+--------+
上面的数据准备好之后,现在开始使用Spark SQL来查询数据了。
dataFrame.createOrReplaceTempView("student")//将读取的json数据注册成一个视图 spark.sql("select name,address from student").show()
输出结果:
+--------+--------+ | name| address| +--------+--------+ |zhangsan| beijing| | lisi|shanghai| +--------+--------+
怎么样,用sql来操作文件,是不是跟Hive一样帅。
SparkSQL语法看这里。要注意,不是所有的数据来源都能执行这些sql。比如从json读取了数据,可以执行select,但是不能执行insert。
Spark on Hive vs Hive on Spark
Spark是个执行引擎,不具备数据存储的能力。Hive是个数据仓库,元数据管理非常优秀,可以利用HDFS来存储数据。那么问题来了,这两种技术有什么关系?为什么经常放在一起说?
Spark on Hive和Hive on Spark,这两个概念有点绕口,前后顺序不同,有啥区别呢?
Spark on Hive 是指Spark处理的数据源来自Hive,使用Hive的元数据,操作Hive的数据表。SQL的解析和优化依然是Spark SQL引擎,执行时转换成RDD的DAG。
Hive on Spark是指把Hive默认的计算引擎(MapReduce)替换为Spark,将Hive SQL转换成Spark程序,可以提升执行的速度。
-------------------------------------------华丽的分割线--------------------------------------------
这一篇写的简单一些,因为我也不太清楚Spark的机制。以后再深入学习吧。