第七次作业

Posted on 2022-05-09 11:32  bracee  阅读(37)  评论(0编辑  收藏  举报

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

因为关系数据库已经很流行,而且关系数据库在大数据时代已经不能满足要求。首先,用户需要从不同数据源执行各种操作,包括结构化、半结构化和非结构化数据。其次,用户需要执行高级分析,比如机器学习和图像处理。在实际大数据应用中,经常需要融合关系查询和复杂分析算法(比如机器学习或图像处理),但是,缺少这样的系统。

Spark SQL填补了这个鸿沟:首先,可以提供DataFrame API,可以对内部和外部各种数据源执行各种关系型操作。其次,可以支持大数据中的大量数据源和数据分析算法Spark SQL可以融合:传统关系数据库的结构化数据管理能力和机器学习算法的数据处理能力。

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

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

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

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

大部分情况下,我们都是从CSV,文本,JSON,XML等数据源文件中实时创建DataFrame。PySpark默认就支持许多数据格式,因此并不需要再单独导入其他库,我们可以从DataFrameReader类中选择合适的方法来创建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]

 

 

 

基于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)

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