7.Spark SQL

1.请分析SparkSQL出现的原因,并简述SparkSQL的起源与发展。

原因:

  • 关系数据库已经很流行
  • 关系数据库在大数据时代已经不能满足要求,首先,用户需要从不同数据源执行各种操作,包括结构化和非结构化数据,其次用户需要执行高级分析,比如机器学习和图像处理
  • 从实际大数据应用中,经常需要融合关系查询和复杂分析算法
    起源:
  • hive并不是另一个SQL,它只是SQL-on-Hadoop,执行的是在Hadoop上实现用 类SQL的语法 对 SQL 的快速查询。而在Spark 开始兴起之后,就开始转向在Spark上使用Hive,于是开发出了Shark==Hive on Spark.

2. 简述RDD 和DataFrame的联系与区别?

联系:

  • RDD、DataFrame、全都是spark 平台下的分布式弹性数据集,为处理超大型数据提供便利
  • 两者根据spark 的内存情况自动缓存运算,这样即使数据量很大,也不用担心会内存溢出

区别:

  • RDD 是整个 Spark 平台的存储、计算以及任务调度的逻辑基础,更具有通用性,适用于各类数据源,
  • DataFrame 是只针对结构化数据源的高层数据抽象,其中在 DataFrame 对象的创建过程中必须指定数据集的结构信息( Schema ),所以DataFrame 生来便是具有专用性的数据抽象,只能读取具有鲜明结构的数据集

3.DataFrame的创建

spark.read.text(url)
image

spark.read.json(url) 注意从不同文件类型生成DataFrame的区别。
image

spark.read.format("text").load("people.txt")
image

spark.read.format("json").load("people.json")
image

4. PySpark-DataFrame各种常用操作

基于df的操作:
打印数据 df.show()默认打印前20条数据
image
打印概要 df.printSchema()
image

查询总行数 df.count()
image

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

输出全部行 df.collect() #list类型,list中每个元素是Row类
image

查询概况 df.describe().show()
image

取列 df[‘name’], df.name, df[1]
image

基于spark.sql的操作:
创建临时表虚拟表 df.registerTempTable('people')
image

spark.sql执行SQL语句 spark.sql('select name from people').show()
image

5. Pyspark中DataFrame与pandas中DataFrame

分别从文件创建DataFrame
image

image

比较两者的异同

  • Pyspark的DataFrame 是基于 RDD 的一种数据类型,具有比 RDD 节省空间和更高运算效率的优点。pandas的DataFrame 是一种表格型数据结构,按照列结构存储,它含有一组有序的列,每列可以是不同的值,但每一列只能有一种数据类型。
  • pandas中DataFrame 是可变的,pyspark中RDDs 是不可变的,因此 DataFrame 也是不可变的
  • pandas中所以是自动创建的,pyspark中没有 index 索引,若需要需要额外创建该列
  • pandas的是Series 结构,属于 Pandas DataFrame 结构,pyspark的是Row 结构,属于 Spark DataFrame 结构
    pandas中DataFrame转换为Pyspark中DataFrame
    image

Pyspark中DataFrame转换为pandas中DataFrame
image

6.从RDD转换得到DataFrame

6.1 利用反射机制推断RDD模式
创建RDD sc.textFile(url).map(),读文件,分割数据项
image

每个RDD元素转换成 Row
image

由Row-RDD转换到DataFrame
image

6.2 使用编程方式定义RDD模式
下面生成“表头”
image

下面生成“表中的记录”
image

下面把“表头”和“表中的记录”拼装在一起
image

7. DataFrame的保存

df.write.text(dir)

df.write.json(dri)

df.write.format("text").save(dir)

df.write.format("json").save(dir)

posted @ 2022-06-06 18:57  GU473  阅读(54)  评论(0编辑  收藏  举报