大数据学习(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的机制。以后再深入学习吧。

posted on 2021-08-12 17:14  别样风景天  阅读(84)  评论(0编辑  收藏  举报

导航