map()和flatMap()的区别
发布日期:2021-05-08 03:58:09 浏览次数:15 分类:精选文章

本文共 1361 字,大约阅读时间需要 4 分钟。

map()和flatMap()的区别

map将函数作用到数据集的每一个元素上,生成一个新的分布式的数据集(RDD)返回

flatMap会先执行map的操作,再将所有对象合并为一个对象,返回值是一个Sequence

flatMap() 的一个简单用途是把输入的字符串切分为单词

3.5.1 基本RDD首先来讲讲哪些转化操作和行动操作受任意数据类型的 RDD 支持。1. 针对各个元素的转化操作你很可能会用到的两个最常用的转化操作是 map() 和 filter()(见图 3-2)。转化操作map() 接收一个函数,把这个函数用于 RDD 中的每个元素,将函数的返回结果作为结果RDD 中对应元素的值。而转化操作 filter() 则接收一个函数,并将 RDD 中满足该函数的元素放入新的 RDD 中返回。例 3-26:Python 版计算 RDD 中各值的平方nums = sc.parallelize([1, 2, 3, 4])squared = nums.map(lambda x: x * x).collect()for num in squared: print "%i " % (num)   有时候,我们希望对每个输入元素生成多个输出元素。  flatMap()  实现该功能的操作叫作 flatMap()。 和 map() 类似,我们提供给 flatMap() 的函数被分别应用到了输入 RDD 的每个元素上。不过返回的不是一个元素,而是一个返回值序列的迭代器。输出的 RDD 倒不是由迭代器组成的。我们得到的是一个包含各个迭代器可访问的所有元素的 RDD。flatMap() 的一个简单用途是把输入的字符串切分为单词,你可以把 flatMap() 看作将返回的迭代器“拍扁”,这样就得到了一个由各列表中的元素组成的 RDD,而不是一个由列表组成的 RDD#方法2需要复制这三行import findsparkfindspark.init()import pyspark import sysfrom pyspark import SparkConf, SparkContextif __name__ == "__main__":#     master = "local"    if len(sys.argv) == 2:        master = sys.argv[1]#         在 Python 中初始化 Spark    conf = SparkConf().setMaster("local").setAppName("My App")    sc = SparkContext(conf = conf)# 通过sc.parallelize可以把Python list,NumPy array或者Pandas Series,Pandas DataFrame转成Spark的RDD数据。    lines = sc.parallelize(["hello world", "hi"])    words = lines.flatMap( lambda line : line.split(" ") )    words.first()    print(words.first())
上一篇:create-react-app路由的实现原理
下一篇:最后的十天(最复杂的十天)

发表评论

最新留言

不错!
[***.144.177.141]2025年04月12日 22时30分34秒