【问题标题】:Output from map() and flatMap() - what is the difference [duplicate]map() 和 flatMap() 的输出-有什么区别[重复]
【发布时间】:2019-04-01 12:51:39
【问题描述】:

我对 spark(和编程)非常陌生,因此,如果您能帮助我了解这两个输出之间的区别,那就太好了。

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

【问题讨论】:

  • 副本在 Scsala,而不是 pyspark。

标签: apache-spark pyspark


【解决方案1】:

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

根据docs

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

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

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

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

【讨论】:

  • 地图功能不是一对一的吗?和一个平面图(可能是)一对多??
  • 是的。具体来说,您可以说对于每个输入 flatMap 输出一个可以包含 0 个或多个元素的序列。
猜你喜欢
  • 2016-12-24
  • 2014-12-28
  • 2011-10-05
  • 2018-09-12
  • 2014-03-15
  • 1970-01-01
  • 1970-01-01
  • 2011-07-05
相关资源
最近更新 更多