补第七次作业

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

        Hadoop刚开始出来的时候,使用的是hadoop自带的分布式计算系统MapReduce,但是MapReduce的使用难度较大,所以就开发了Hive,Hive编程用的是类SQL的HQL的语句,这样编程的难度就大大的降低了,Hive的运行原理就是将HQL语句经过语法解析、逻辑计划、物理计划转化成MapReduce程序执行。当Spark出来以后,Spark团队也开发了一个Shark,就是在Spark集群上安装一个Hive的集群,执行引擎是Hive转化成Mapreduce的执行引擎,这样的框架就是Hive  on  Spark,但是这样是有局限性的,因为Shark的版本升级是依赖Hive的版本的,所有2014年7月1日spark团队就将Shark转给Hive进行管理,Spark团队开发了一个SparkSQL,这个计算框架就是将Hive on Spark的将SQL语句转化为Spark RDD的执行引擎换成自己团队从新开发的执行引擎。

 

2. 简述RDD 和DataFrame的联系与区别?
联系
都是spark平台下的分布式弹性数据集,为处理超大型数据提供便利;
都有惰性机制,在进行创建、转换,如map方法时,不会立即执行,只有在遇到Action才会运算;
都会根据spark的内存情况自动缓存运算,这样即使数据量很大,也不用担心会内存溢出;
三者都有partition的概念;
三者有许多共同的函数,如filter,排序等。

区别

 RDD是分布式的java对象的集合,但是对象内部结构对于RDD而言却是不可知的。
DataFrame是一种以RDD为基础的分布式数据集,提供了详细的结构信息,相当于关系数据库中的一张表。

 

 

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的区别。

  区别: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 

从创建与操作上,比较两者的异同

  Pandas Pyspark
创建上 从 spark_df 转换:pandas_df = spark_df.toPandas()

从 pandas_df 转换:spark_df = SQLContext.createDataFrame(pandas_df),另外,createDataFrame 支持从 list 转换 spark_df,其中 list 元素可以为 tuple,dict,rdd

list,dict,ndarray 转换

已有的 RDDs 转换

CSV文件数据集读取

结构化数据文件读取

HDF5 读取

JSON 数据集读取

EXCEL 读取

Hive 表读取

 

外部数据库读取

操作上 Series 结构,属于 Pandas DataFrame 结构

Row 结构,属于 Spark DataFrame 结构

Series 结构,属于 Pandas DataFrame 结构

Column 结构,属于 Spark DataFrame 结构,如:DataFrame[name: string]

df 输出具体内容

df 不输出具体内容,输出具体内容用 show 方法
输出形式:DataFrame[age: bigint, name: string],df.show() 输出具体内容

没有树结构输出形式

以树的形式打印概要:df.printSchema()

pandas_df = spark_df.toPandas()

spark_df = sqlContext.createDataFrame(pandas_df)

 

 

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)

    

posted @ 2022-05-15 23:27  法外狂徒!?  阅读(66)  评论(0编辑  收藏  举报