7.Spark SQL
1.请分析SparkSQL出现的原因,并简述SparkSQL的起源与发展。
Spark SQL 的前身是 Shark ,即"Hive on Spark",由 Reynold Xin 主导开发。Spark SQL 抛弃原有 Shark 的架构方式,但汲取了 Shark 的一些优点,如内存列存储( In-Memory Columnar Storage )、 Hive 兼容性等,重新开发了 SQL 各个模块的代码。
2.简述RDD 和DataFrame的联系与区别?
RDD 和 DataFrame 均为 Spark 平台对数据的一种抽象,一种组织方式,但是两者的地位或者说设计目的却截然不同。RDD 是整个 Spark 平台的存储、计算以及任务调度的逻辑基础,更具有通用性,适用于各类数据源,而 DataFrame 是只针对结构化数据源的高层数据抽象,其中在 DataFrame 对象的创建过程中必须指定数据集的结构信息( Schema ),所以 DataFrame 生来便是具有专用性的数据抽象,只能读取具有鲜明结构的数据集
3.DataFrame的创建
spark.read.text(url)

spark.read.json(url)

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

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

描述从不同文件类型生成DataFrame的区别。
用相同的txt或json文件,同时创建RDD,比较RDD与DataFrame的区别。
4. PySpark-DataFrame各种常用操作
基于df的操作:
打印数据 df.show()默认打印前20条数据

打印概要 df.printSchema()

查询总行数 df.count()

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

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

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

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

选择 df.select() 每个人的年龄+1

筛选 df.filter() 20岁以上的人员信息

筛选年龄为空的人员信息

分组df.groupBy() 统计每个年龄的人数

排序df.sortBy() 按年龄进行排序

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

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

5. Pyspark中DataFrame与pandas中DataFrame
分别从文件创建DataFrame

pandas中DataFrame转换为Pyspark中DataFrame

Pyspark中DataFrame转换为pandas中DataFrame

从创建与操作上,比较两者的异同
6.从RDD转换得到DataFrame
6.1 利用反射机制推断RDD模式
创建RDD sc.textFile(url).map(),读文件,分割数据项
每个RDD元素转换成 Row
由Row-RDD转换到DataFrame
6.2 使用编程方式定义RDD模式
#下面生成“表头”
#下面生成“表中的记录”
#下面把“表头”和“表中的记录”拼装在一起
7. DataFrame的保存
df.write.text(dir)
df.write.json(dri)
df.write.format("text").save(dir)
df.write.format("json").save(dir)
df.write.format("json").save(dir)

浙公网安备 33010602011771号