我对火花(和编程)很陌生,所以如果你能帮助我理解这两个输出之间的区别,那就太好了。
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 问题,它演示了一个很好的用例。