《Spark数据分析:基于Python语言 》 —1.3 Python函数式编程

举报
华章计算机 发表于 2020/02/12 17:25:20 2020/02/12
【摘要】 本节书摘来自华章计算机《Spark数据分析:基于Python语言 》 一书中第1章,第1.3.1节,作者是[澳] 杰夫瑞·艾文(Jeffrey Aven) ,王道远 译。

1.3 Python函数式编程

Python是一门非常有用的语言,涵盖了从自动化到网络服务再到机器学习的方方面面应用。如今Python已经上升为最广为使用的编程语言之一。

作为一种多范式编程语言,Python结合了命令式编程和面向过程的编程范式,也对面向对象和函数式编程范式提供了完整支持。

接下来将介绍Python里的函数式编程的概念和要素,这些内容对于使用Spark的Python编程接口(PySpark)是不可或缺的,也是本书主要内容Spark编程的基础。具体内容包括匿名函数、常见的高阶函数以及不可变和可迭代的数据结构等。

1.3.1 Python函数式编程中的数据结构

Spark里的Python RDD表示的就是Python对象的分布式集合,因此理解Python中各种可用的数据结构尤为重要。

1.列表

Python中的列表(list)是值可变的序列,第一个元素下标为0。可以删除或替换列表中的元素,也可以在列表末尾添加元素。程序清单1.2是Python中列表的一个简单示例。

程序清单1.2 列表

 image.png

如程序清单1.2所示,可以访问列表中的每个元素,将元素的序号放在方括号内即可。

重点来了,列表支持函数式编程的三个重要的函数map()、reduce()和filter(),还支持其他一些内建函数,比如count()和sort()等。在本书中,我们会花相当一部分时间和Spark RDD打交道,它本质上就是Python列表的一种表示。程序清单1.3提供了使用Python列表的map()函数的一个基本示例,操作一个输入列表,返回一个新列表。稍后会进一步介绍这个函数。这个示例是用纯Python编写的。PySpark里面等价的操作的语法略有不同。

程序清单1.3 Python中的map()函数

 image.png

尽管在Python里,列表默认是值可变的,然而在Spark里面,Python RDD所包含的列表对象是值不可变的,这一点和Spark RDD里面的其他对象都是一样的。

集合是Python中一种类似于列表的对象类型,只不过集合是基于数学里的集合概念的抽象。集合是无序且无重复的数据集,支持数学中常见的集合操作,比如union()和intersection()等。

2.元组

元组(tuple)是由对象组成的一个不可变的序列,尽管元组包含的对象本身可以是不可变的,也可以是可变的。元组可以包含不同类型的对象,比如混合字符串、整型和浮点型对象,也可以包含其他的序列类型,比如集合或者另一个元组。

为了便于理解,不妨把元组看作近似于不可变列表。不过,元组和列表其实是完全不同的底层结构,使用场景也不一样。

元组和关系型数据库里数据表的记录类似,每条记录都有结构,而这个结构里每个序号的位置对应的字段都有固定的含义。而列表对象内部的顺序则很单纯,因为列表的值是可变的,列表内部的顺序和列表结构没有直接的关系。

元组是把至少一个以逗号分隔的值用圆括号包起来。访问Python元组中的元素和访问列表中的元素是相似的:在方括号内通过具体元素对应的从零开始数的下标来访问。

元组对象提供了和别的元组对象进行比较的方法,还有返回元组长度(元组中元素的个数)的方法。在Python中,你可以使用tuple(list)函数把列表转为元组。

程序清单1.4展示了原生Python中元组的创建和使用。

程序清单1.4 元组

 image.png

 image.png

如程序清单1.4所示,分清楚方括号和圆括号很重要,因为它们代表着截然不同的数据结构。

元组是Spark中不可或缺的对象,它们通常用于表示键值对,而键值对是Spark编程中数据的基本单位。

3.字典

Python里的字典(Dictionary或者dict)是由键值对组成的无序集合。字典对象通过花括号({})表示,比如如果要创建一个空的字典,只需执行my_empty_dict = {}这样的一条命令。与列表和元组不同的是,列表和元组内的元素可以通过它在原始顺序中的位置(下标)进行访问,而字典中的元素要通过键进行访问。键和对应值之间用冒号(:)分隔,而字典里的不同的键值对之间用逗号进行分隔。

字典的用处在于,字典中的元素都是自描述的,无需依赖预先定义的结构或者顺序。字典对象通过键进行访问,如程序清单1.5所示。这个清单还展示了如何对字典添加或者删除元素,还有其他一些字典方法,包括keys()、values()、cmp()和len()。

程序清单1.5 字典

 image.png

字典可以在Python RDD中作为不可变对象使用。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。