我是火花(和编程)领域的新手,所以如果您能帮助我理解这两个输出之间的差异,那将是非常不错的。
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
答案 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,它演示了一个很好的用例。