pyspark(二)——pyspark的语法
这是pyspark学习的第二章,上节中我们已经介绍了pyspark的安装与简单的语法,本篇文章也是pyspark语法的介绍,给大家更加详细的介绍pyspark的数据处理。废话不多说,现在就开始吧。
一:聚合操作
一:groupby
groupby就是分类聚合操作,在结构化的数据处理中是非常常见的操作,那么在pyspark中是怎么操作的呢?
分组后排序,根据每组中数据的个数进行排序:
当然除了count之外还有max,min,sum等操作
采用alias将avg('I2')重命名。
二:collect
collect中有collect_list和collect_set,前后就是将某个字段的数据形成一个list,后者就是形成一个set。
如果要将...后面的显示清楚,可以在show()中输入truncate =False,collect_set(I8)的数据是去重后的。
采用collect_list表示不去重。
二:其它操作
一:自定义函数(UDF)
UDF就是用户自己定义函数,下面就是一个简单的例子:
与Python UDF相比,Pandas UDF速度更快,主要是因为前后是按行处理,后者是按照块处理,能够更好地利用分布式的特性。使用方法和Pandas和UDF一样,如下所示。
但是,意外的是,出现了如下的bug,按照提示安装好库之后。
于是又有了新的bug,查询了一些原因之后,发现是没有安装hadoop的原因。于是安装hadoop,注意的是安装3.0.0 必须要用Java 8。(安装过程中如果出现了什么疑问可以直接咨询。)
二:Join
join操作就是表连接,在sql,pandas里面相信大家也都见识过了,这里我们来介绍下pyspark中的用法。
首先创建一个新的表:
然后使用join函数就可以啦。
三:Pivoting
熟悉数据分析的人肯定会经常用到透视表,在pyspark中也可以做透视表,具体的方法如下所示:
四:Window Functions
有时候我们会需要一些分区操作,或者一些Rank操作,比如计算一列的Rank,或者分类之后计算Rank等。接下来我们就介绍这类操作。
上图的操作是根据I2倒排,然后根据排序位次生成一个Rank字段。
与上文的相比,这里通过I8进行分区,然后再对I2进行排序,最后生成排序的结果。
我们知道除了十二星座外,还有NULL,因此是13给分区,每个分区都有一个rank=1的数据。有时候我们需要选取每个分区的Top数据,因此可以通过这种方式选取。
这次有关于Pyspark语法的操作就到这里结束了,下节内容是Pyspark流式数据处理(Spark Structured Streaming)。敬请期待。