SparkSQL & Dataframes

整理至spark官网 (官网:http://spark.apache.org)
1、What is sparkSQL? (概念)
2、HQL(hive sql)与sparkSQL的对比
3、dataframes(概念、DF创建、DF常用操作(DSL风格、SQL风格))
4、以编程方式执行Spark SQL查询

1、What is sparkSQL? (概念)在这里插入图片描述

Spark SQL是Spark用来处理结构化数据的一个模块,它提供了一个编程抽象叫做DataFrame并且有作为分布式SQL查询引擎的作用。

2、HQL(hive sql)与sparkSQL的对比

Hive是将Hive SQL转换成MapReduce然后提交到集群上执行,大大简化了编写MapReduce的程序的复杂性,由于MapReduce这种计算模型执行效率比较慢。所有Spark SQL的应运而生,它是将Spark SQL转换成RDD,然后提交到集群执行,执行效率非常快!

3、Dataframes

1、dataframes概念介绍:
与RDD类似,DataFrame也是一个分布式数据容器。然而DataFrame更像传统数据库的二维表格,除了数据以外,还记录数据的结构信息,即schema。同时,与Hive类似,DataFrame也支持嵌套数据类型(struct、array和map)。从API易用性的角度上看,DataFrame API提供的是一套高层的关系操作,比函数式的RDD API要更加友好,门槛更低。由于与(Python)中R和Pandas的DataFrame类似,Spark DataFrame很好地继承了传统单机数据分析的开发体验。

在这里插入图片描述
2、创建DataFrames
在Spark SQL中SQLContext是创建DataFrames和执行SQL的入口,在spark-1.6.1中已经内置了一个sqlContext在这里插入图片描述

1、在本地创建一个文件,有三列,分别是id、name、age,用空格分隔,然后上传到hdfs上
hdfs dfs -put person.txt /

2、在spark shell执行下面命令,读取数据,将每一行的数据使用列分隔符分割
val lineRDD = sc.textFile(“hdfs://node1:8020/person.txt”).map(_.split(" "))

3、定义case class(相当于表的schema)
case class Person(id:Int, name:String, age:Int)

4、将RDD和case class关联
val personRDD = lineRDD.map(x => Person(x(0).toInt, x(1), x(2).toInt))

5、将RDD转换成DataFrame
val personDF = personRDD.toDF

6、对DataFrame进行处理
personDF.show
在这里插入图片描述

3、Dataframe常用操作
博文链接;
https://mp.csdn.net/mdeditor/88133402#

4、以编程方式执行Spark SQL查询
1、通过反射推断Schema(字段的信息,即表结构)
2、通过StructType直接指定Schema

猜你喜欢

转载自blog.csdn.net/murphyZ/article/details/88128185