在处理大数据时,将数据分组是一个基本且重要的技能。特别是当处理大量数据时,如果不能将数据分段,那么分析和进一步使用数据以提取商业洞察将变得更加困难。聚合函数与分组函数紧密相连,不能在没有聚合函数(如SUM、COUNT、AVG、MAX、MIN等)的情况下使用groupBy。
在本节中,将建立与Apache Spark的PySpark连接,并读取将在其上应用聚合和分组操作的数据集。
from pyspark.sql import SparkSession
spark_aggregate = SparkSession.builder.appName('Aggregate and GroupBy').getOrCreate()
简而言之,从pyspark.sql包中导入了SparkSession,并使用getOrCreate()函数创建了SparkSession。
在这里,将读取虚拟数据集,将在该数据集上执行GroupBy和Aggregate函数。
spark_aggregate_data = spark_aggregate.read.csv('/content/part4.csv', header=True, inferSchema=True)
spark_aggregate_data.show()
已经成功读取了虚拟数据集,并借助show函数,可以看到DataFrame。
将检查表/数据集的结构,看看每个列包含什么类型的数据。
spark_aggregate_data.printSchema()
在使用printSchema()函数后,可以看到每个列的数据类型。
现在让深入博客的主要话题,将从执行一些分组操作开始,这在需要将大数据分组到更小的块时非常有用。
spark_aggregate_data.groupBy('Name')
在上面的代码中,使用了GroupBy()函数,特别是使用Name列进行分组。
已经讨论了一些常用的聚合函数,现在将实现其中的一些,并看看它们将返回什么样的结果。
将讨论“Name”参数的GroupBy函数,并看看它在处理求和方法时的实用性。
spark_aggregate_data.groupBy('Name').sum().show()
在上面的输出中,很明显Name列已经与salary列的总和一起分组。
通过按“部门”列分组并使用sum聚合函数,可以找出哪个部门提供最高的薪水。
spark_aggregate_data.groupBy('Departments').sum().show()