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

时间:2018-10-28 11:42:50

标签: apache-spark pyspark

我是火花(和编程)领域的新手,所以如果您能帮助我理解这两个输出之间的差异,那将是非常不错的。

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

1 个答案:

答案 0 :(得分:0)

#nickname { background-color: #44475a; vertical-align: middle; border: none; height: 2em; width: 20em; outline: none; } 函数是一对多转换,而map函数是一对零或许多转换

根据docs

  

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

     

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

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

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