06 Spark SQL 及其DataFrame的基本操作

1.Spark SQL出现的 原因是什么?

  Shark是Spaek SQL的前身,Shark提供了类似于Hive的功能,与Hive不同的是,Shark把SQL语句转换成Spark作业,而不是MapReduce作业,Shark的设计导致了两个问题:(1)执行计划优化完全依赖于Hive,不便于添加新的优化策略;(2)Shark是线程级并行,而MapReduce是进程级并行,因此Spark在兼容Hive的实现上存在线程安全问题,导致Shark不得不使用另外一套独立维护的、打了补丁的Hive源码分支。因为上述缺点,在2014年,Shark项目终止,并转向Spark SQL的开发。Spark SQL在Shark原有的基础上重写了逻辑执行计划的优化部分,解决了Shark存在的问题,此外。Spark SQL增加了DataFrame,使用户可以在Spark SQL中执行SQL语句,数据既可以来自RDD,也可以来自Hive、HDFS、Cassandra等外部数据源,还可以是JSON格式的数据。

2.用spark.read 创建DataFrame

使用spark.read操作可以实现从不同类型的文件中加载数据创建DataFrame,如:读取文本文件并创建DataFrame:saprk.read.text("文件名.txt")或spark.read.format.("text").load("文件名.txt"),读取JSON文件并创建DataFrame:saprk.read.json("文件名.json")或spark.read.format.("json").load("文件名.json"),读取Parquet文件并创建DataFrame:saprk.read.parquet("文件名.parquet")或spark.read.format.("parquet").load("文件名.parquet")。

3.观察从不同类型文件创建DataFrame有什么异同?

 

4.观察Spark的DataFrame与Python pandas的DataFrame有什么异同?

  Python pandas的DataFrame 是一种表格型数据结构,按照列结构存储,它含有一组有序的列,每列可以是不同的值,但每一列只能有一种数据类型。DataFrame 既有行索引,也有列索引,它可以看作是由 Series 组成的字典,不过这些 Series 公用一个索引。依赖 Python 这一简洁明了的语言,DataFrame 操作比较简洁,此外 DataFrame 还拥有比较丰富的操作 api 接口,能比较容易实现中小型数据集的操作。此外,Pandas中DataFrame是可以修改的,列操作直接可以进行替换。可以使用df.ix[index]或者df.ix[index_name]或者df[index_name]来处理。

  在 Spark 中, DataFrame 是基于 RDD 实现的,一个以命名列方式组织的分布式数据集。实际存储与 RDD 一致,基于行存储,但是 Spark 框架本身不了解 RDD 数据的内部结构,而 DataFrame 却提供了详细的结构信息,Spark DataFrame 将数据以单独表结构,分散在分布式集群的各台机器上,所以 spark dataframe 是天然的分布式表结构。Spark中DataFrame是不可修改的,可以使用df.withColumn()。必须新建一列保存结果,再去删除原来列。

 

Spark SQL DataFrame的基本操作

创建:

spark.read.text()

spark.read.json()

打印数据

df.show()默认打印前20条数据,df.show(n)

打印概要

df.printSchema()

查询总行数

df.count()

df.head(3) #list类型,list中每个元素是Row类

输出全部行

df.collect() #list类型,list中每个元素是Row类

查询概况

df.describe().show()

取列

df[‘name’]

df.name

df.select()

df.filter()

df.groupBy()

df.sort()

posted @ 2021-05-09 22:03  嘁嘁嘁7  阅读(93)  评论(0编辑  收藏  举报