map() 和 flatMap() 的输出 - 有什么区别



我对火花(和编程)很陌生,所以如果你能帮助我理解这两个输出之间的区别,那就太好了。

map()
>>> data = ['1', '2', '3', '4', '5', 'one', 'two']
>>> distData = sc.parallelize(data)
>>> maping = distData.map(lambda x: x.split())
>>> maping.collect()
[['1'], ['2'], ['3'], ['4'], ['5'], ['one'], ['two']]                           
>>> for i in maping.take(100): print(i)
... 
['1']
['2']
['3']
['4']
['5']
['one']
['two']
FlatMap()
>>> maping = distData.flatMap(lambda x: x.split())
>>> maping.collect()
['1', '2', '3', '4', '5', 'one', 'two']
>>> for i in maping.take(100): print(i)
... 
1
2
3
4
5
one
two

map函数是一对多变换,而flatMap函数是一对零或多变换

根据文档,

map(func):返回一个新的分布式数据集,该数据集是通过函数函数传递源的每个元素而形成的。

flatMap(func):与map类似,但每个输入项都可以映射到0 或更多输出项(因此 func 应返回 Seq 而不是单个 项)。

您可以说对于每个输入值,flatMap输出一个sequence,该可以有 0 个或多个元素,这些元素被展平以形成输出 RDD。

请参阅此 SO 问题,它演示了一个很好的用例。

最新更新