在第 2 段的第 1 行中,Wiki ( https://en.wikipedia.org/wiki/MapReduce ) 说 map() 也应负责“过滤”。
然而,我的理解是 map() 应仅负责通过“转换”更改数据集的“形式”,而不负责“过滤”。
这条线令人困惑吗?
最佳答案
关于纯 map-reduce(这个 wiki 指的是),在 map 阶段进行过滤是要走的路:
- 在 map 阶段之前您没有预处理
- 你应该尽可能减少数据以减轻洗牌和排序阶段的数据负载
- 因此,map 是您根据需要应用业务逻辑过滤的地方
基本上,由于您只实现 map 和 reduce,您也可以将其解释为:给定阶段 map 和 reduce,在 _map_ 中执行业务过滤,因为在 _reduce_ 中过滤会通过集群发送很多不必要的数据。
希望这能让它更清楚。
在引用 spark 的评论之后进行编辑。
请注意,Spark Streaming API 中的 map() 函数与 map-reduce 中的 map 函数完全不同。
这只是不幸的巧合,它们被称为相同的,因为 spark 在 map-reduce(或 yarn)复杂性之上分层了一个类似流的 API,传统上有一个 map()-function,这是一个来自函数式的概念编程。该映射函数也没有任何类似于发射步骤的内容。
因此:map-reduce 中的 map(除了 map 和 reduce 之外没有其他功能 - 检查您发布的链接中的示例)应该进行过滤。请注意,map-reduce 中的映射对于每个输入都有 0 .. n 个输出。
Spark 中的映射或其他类型的流式 API 应仅执行从一种类型到另一种类型的转换。 (一个输入导致一个输出。)
关于hadoop - map 与过滤器操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40459695/