首先打开shell,会发现在bin目录下会有一个叫spark-sql,那除了用spark-sql外,还可以用
spark-shell,那它们有什么区别呢,spark-sql仅仅类似于hive客户端,只是支持sql查询,spark-shell
不仅可以支持sql查询,还可以执行RDD的一些操作,包括RDD和SparkSQL之间的转换。
接下来进入spark-shell里面,会有两个输出
第一个输出是 Spark context available as 'sc'
第二个输出是 Spark session available as 'spark'
,这个Spark session是进入sparkSQL的主入口。
接下来利用shell来读取一个文件
spark目录下有一个examples,里面有一个people.json:
cd /home/groot/soft/spark/examples/src/main/resources
cat people.json
当我们进入spark-shell来读取一个文件时,会发生如下的错误:
为什么会出错呢?是应为我们读的是Hadoop的目录,那这个时候我们可以直接把这个people.json文
件传到hdfs上去。
hdfs dfs -put ./people.json /
hdfs dfs -ls /
val df = spark.read.json("/people.json")
那这个时候就读取成功了
接下来就可以查看各个函数的用法了
df.filter($"age" < 20).show
从上面的查询语句来看,它并不是sql查询,OK,在sql查询之前,首先把它注册成一张表
从上面可以看出,create分为两种类型,一类是有Global的TempView,一类是没有Global的
TempView,它们两种类型的区别就是:有Global的TempView是可以在多个session里面共同使用
的,而没有Global的TempView只有在当前session是有用的。
下面使用sql来实现:
df.createOrReplaceTempView("people")
通过以上两个小例子,可以看出在我们操作DataFrame的时候,有两种方式,一种方式是用类似于这
种链接式操作,通过它的一些操作算法、算子、转换这些方式来操作。另外一种方式是先把它注册成
一张表,然后通过sql查询进行操作。
总结:
1、你可以通过Spark-shell来操作Spark SQL,spark作为SparkSession的变量名
2、可以通过Spark提供的方法读取JSON文件,将JSON文件转换成DataFrame
3、可以通过DataFrame提供的API来操作DataFrame里面的数据
4、你可以通过将DataFrame注册成一个临时表的方式,来通过Spark-sql方法运行标准的SQL语句来
查询。