Spark SQL 客户端查询

首先打开shell,会发现在bin目录下会有一个叫spark-sql,那除了用spark-sql外,还可以用

spark-shell,那它们有什么区别呢,spark-sql仅仅类似于hive客户端,只是支持sql查询,spark-shell

不仅可以支持sql查询,还可以执行RDD的一些操作,包括RDD和SparkSQL之间的转换。
Spark SQL 客户端查询_第1张图片

接下来进入spark-shell里面,会有两个输出

第一个输出是 Spark context available as 'sc'

第二个输出是 Spark session available as 'spark' ,这个Spark session是进入sparkSQL的主入口。
Spark SQL 客户端查询_第2张图片
接下来利用shell来读取一个文件

spark目录下有一个examples,里面有一个people.json

cd /home/groot/soft/spark/examples/src/main/resources

cat people.json

Spark SQL 客户端查询_第3张图片

当我们进入spark-shell来读取一个文件时,会发生如下的错误:
Spark SQL 客户端查询_第4张图片
为什么会出错呢?是应为我们读的是Hadoop的目录,那这个时候我们可以直接把这个people.json文

件传到hdfs上去。

hdfs dfs -put ./people.json /

hdfs dfs -ls /

Spark SQL 客户端查询_第5张图片
传上去以后在执行:

val df = spark.read.json("/people.json")

Spark SQL 客户端查询_第6张图片

那这个时候就读取成功了

接下来就可以查看各个函数的用法了

df.filter($"age" < 20).show

Spark SQL 客户端查询_第7张图片

从上面的查询语句来看,它并不是sql查询,OK,在sql查询之前,首先把它注册成一张表
在这里插入图片描述

从上面可以看出,create分为两种类型,一类是有Global的TempView,一类是没有Global的

TempView,它们两种类型的区别就是:有Global的TempView是可以在多个session里面共同使用

的,而没有Global的TempView只有在当前session是有用的。

下面使用sql来实现:

df.createOrReplaceTempView("people")

Spark SQL 客户端查询_第8张图片

通过以上两个小例子,可以看出在我们操作DataFrame的时候,有两种方式,一种方式是用类似于这

种链接式操作,通过它的一些操作算法、算子、转换这些方式来操作。另外一种方式是先把它注册成

一张表,然后通过sql查询进行操作。

总结:

1、你可以通过Spark-shell来操作Spark SQL,spark作为SparkSession的变量名

2、可以通过Spark提供的方法读取JSON文件,将JSON文件转换成DataFrame

3、可以通过DataFrame提供的API来操作DataFrame里面的数据

4、你可以通过将DataFrame注册成一个临时表的方式,来通过Spark-sql方法运行标准的SQL语句来

查询。

你可能感兴趣的:(spark)