大数据基础平台——Spark大数据处理

1.实验目的

了解与掌握数据框的创建、选择、运算和聚合、增加、删除和修改、连接、变形。

2.实验内容及结果截屏

(1)Spark大数据处理

载入本章需要用到的程序包:

大数据基础平台——Spark大数据处理_第1张图片

 (2)数据框的创建

①通过键入创建

调用spark的函数createDataFrame()创建数据框:

调用数据框的函数show()查看数据集前几行,默认为前20行:

大数据基础平台——Spark大数据处理_第2张图片

从字典的列表创建数据框,其中字典的键表示数据集的变量名即列名,字典的值表示每行每列的数据值:

大数据基础平台——Spark大数据处理_第3张图片

从列表的RDD创建数据框:

大数据基础平台——Spark大数据处理_第4张图片

 使用数据框的属性columns和dtypes得到列名和数据类型:

②通过读入数据文件创建

调用spark的函数read()得到从外部存储系统读取数据的接口,进一步级联调用其函数csv()读取CSV文件:

大数据基础平台——Spark大数据处理_第5张图片

 读取航空公司数据集:

大数据基础平台——Spark大数据处理_第6张图片

 (3)数据框的选择

①数据列的选择

调用数据框的函数select()选取指定列:

大数据基础平台——Spark大数据处理_第7张图片

 通过列名的字符串选取多列数据:

大数据基础平台——Spark大数据处理_第8张图片

 通过形如<数据框名>.<列名>的Column对象选取多列数据:

大数据基础平台——Spark大数据处理_第9张图片

②数据列的计算

通过Column对象表达式选取多列数据:

大数据基础平台——Spark大数据处理_第10张图片

 调用Column对象的函数alias()设置列名:

大数据基础平台——Spark大数据处理_第11张图片

③数据行的选择

通过Column对象的判断表达式选取航班数据集中出发地(变量origin)为'JFK'的数据行:

大数据基础平台——Spark大数据处理_第12张图片

选取航班数据集中出发地(变量origin)为'JFK'、月份(变量month)为6月的数据行:

大数据基础平台——Spark大数据处理_第13张图片

 筛选条件为SQL表达式字符串:

大数据基础平台——Spark大数据处理_第14张图片

 调用数据框的函数limit()选取数据框的前几行,返回结果还是一个数据框:

大数据基础平台——Spark大数据处理_第15张图片

 (4)数据框的运算和聚合

①数据框的统计运算

大数据基础平台——Spark大数据处理_第16张图片

②数据框的聚合

按出发地(变量origin)分组:

 调用GroupedData分组对象的函数count()返回包含分组记录数的数据框:

大数据基础平台——Spark大数据处理_第17张图片

 GroupedData分组对象有如下函数实现常用统计功能:

大数据基础平台——Spark大数据处理_第18张图片

在函数agg()中指定由程序包pyspark.sql.functions中统计函数得到的Column对象列表,计算在各不同出发地和目的地组合中,平均到达和出发延误分钟数(变量arr_delay和dep_delay):

大数据基础平台——Spark大数据处理_第19张图片

在函数agg()中指定键为变量名、值为聚合函数的字典,即对不同变量执行不同的聚合函数,计算在各不同出发地和目的地组合中,到达延误分钟数(变量arr_delay)的均值和出发延误分钟数(变量dep_delay)的最大值:

大数据基础平台——Spark大数据处理_第20张图片

 (5)数据框的增加、删除和修改

①数据增加

调用数据框的函数withColumn()增加或替换数据列,返回一个新的数据框:

大数据基础平台——Spark大数据处理_第21张图片

 调用数据框的函数unionAll()与另一个数据框按行合并,返回一个新的数据框:

大数据基础平台——Spark大数据处理_第22张图片

②数据删除

调用数据框的函数drop()删除指定列,返回一个新的数据框。以下例子删除航班数据的变量tailnum:

大数据基础平台——Spark大数据处理_第23张图片

③数据修改

调用数据框的函数withColumn()增加或替换数据列,返回一个新的数据框:

大数据基础平台——Spark大数据处理_第24张图片

 (6)数据框的连接

①内连接

调用数据框的函数join()并指定参数how = 'inner'做内连接、参数on为连接变量名:

大数据基础平台——Spark大数据处理_第25张图片

 计算内连接前航班数据集的记录条数和连接后的记录条数:

 指定参数on为连接条件做内连接,与之前得到的结果完全一致,除了连接变量carrier出现了2次:

大数据基础平台——Spark大数据处理_第26张图片

②左连接

调用数据框的函数join()并指定参数how = 'left_outer'做左连接:

大数据基础平台——Spark大数据处理_第27张图片

 计算左连接前航班数据集的记录条数和连接后的记录条数:

③全链接

调用数据框的函数join()并指定参数how为'outer'做全连接:

大数据基础平台——Spark大数据处理_第28张图片

 计算全连接前航班数据集的记录条数和连接后的记录条数:

 (7)数据框的变形

①从“长”转“宽”

计算在各不同年份、月份和出发地组合中,平均出发延误分钟数(变量dep_delay),其中不同的出发地用不同列表示:

大数据基础平台——Spark大数据处理_第29张图片

 没有指定参数values时,效率较低:

大数据基础平台——Spark大数据处理_第30张图片

 3.实验分析及小结

       在此次实验过程中,我了解与掌握数据框的创建、选择、运算和聚合、增加、删除和修改、连接、变形。在实验过程中,我基本没有遇到问题,除了在指定参数values后计算在各不同年份、月份和出发地组合中,平均出发延误分钟数时,遇到了下图中的报错。

       我先去除了values参数运行,发现正常运行没有报错,因此确认是values参数中的问题。故怀疑是需要参数类型问题,但仔细检查后,发现是代码从教程中复制到虚拟机后,有三个逗号丢失了,因此将逗号补上,之后便没有报错了。

       在之后的实验中,我会更加认真地学习、理解代码,同时尽可能减少粗心导致的错误。

你可能感兴趣的:(大数据基础平台,大数据,spark,分布式)