pyspark(二)——pyspark的语法

        这是pyspark学习的第二章,上节中我们已经介绍了pyspark的安装与简单的语法,本篇文章也是pyspark语法的介绍,给大家更加详细的介绍pyspark的数据处理。废话不多说,现在就开始吧。

一:聚合操作

一:groupby

        groupby就是分类聚合操作,在结构化的数据处理中是非常常见的操作,那么在pyspark中是怎么操作的呢?

config pyspark 查看 pyspark collect_set_python

    分组后排序,根据每组中数据的个数进行排序:

config pyspark 查看 pyspark collect_set_spark_02

    当然除了count之外还有max,min,sum等操作

config pyspark 查看 pyspark collect_set_python_03

    采用alias将avg('I2')重命名。

config pyspark 查看 pyspark collect_set_spark_04

二:collect

    collect中有collect_list和collect_set,前后就是将某个字段的数据形成一个list,后者就是形成一个set。

    

config pyspark 查看 pyspark collect_set_config pyspark 查看_05

    如果要将...后面的显示清楚,可以在show()中输入truncate =False,collect_set(I8)的数据是去重后的。

config pyspark 查看 pyspark collect_set_spark_06

    采用collect_list表示不去重。

config pyspark 查看 pyspark collect_set_spark_07

 

二:其它操作

一:自定义函数(UDF)

        UDF就是用户自己定义函数,下面就是一个简单的例子:

config pyspark 查看 pyspark collect_set_python_08

        与Python UDF相比,Pandas UDF速度更快,主要是因为前后是按行处理,后者是按照块处理,能够更好地利用分布式的特性。使用方法和Pandas和UDF一样,如下所示。

config pyspark 查看 pyspark collect_set_python_09

        但是,意外的是,出现了如下的bug,按照提示安装好库之后。

config pyspark 查看 pyspark collect_set_spark_10

        于是又有了新的bug,查询了一些原因之后,发现是没有安装hadoop的原因。于是安装hadoop,注意的是安装3.0.0 必须要用Java 8。(安装过程中如果出现了什么疑问可以直接咨询。)

二:Join

        join操作就是表连接,在sql,pandas里面相信大家也都见识过了,这里我们来介绍下pyspark中的用法。

首先创建一个新的表:

config pyspark 查看 pyspark collect_set_python_11

然后使用join函数就可以啦。

config pyspark 查看 pyspark collect_set_数据_12

三:Pivoting

        熟悉数据分析的人肯定会经常用到透视表,在pyspark中也可以做透视表,具体的方法如下所示:

config pyspark 查看 pyspark collect_set_config pyspark 查看_13

四:Window Functions

        有时候我们会需要一些分区操作,或者一些Rank操作,比如计算一列的Rank,或者分类之后计算Rank等。接下来我们就介绍这类操作。

config pyspark 查看 pyspark collect_set_大数据_14

        上图的操作是根据I2倒排,然后根据排序位次生成一个Rank字段。

config pyspark 查看 pyspark collect_set_spark_15

        与上文的相比,这里通过I8进行分区,然后再对I2进行排序,最后生成排序的结果。

config pyspark 查看 pyspark collect_set_spark_16

        我们知道除了十二星座外,还有NULL,因此是13给分区,每个分区都有一个rank=1的数据。有时候我们需要选取每个分区的Top数据,因此可以通过这种方式选取。

config pyspark 查看 pyspark collect_set_python_17

 

        这次有关于Pyspark语法的操作就到这里结束了,下节内容是Pyspark流式数据处理(Spark Structured  Streaming)。敬请期待。