【问题标题】:Map Vs Filter Operations映射与过滤器操作
【发布时间】:2016-11-07 07:16:51
【问题描述】:

在第二段的第一行,Wiki (https://en.wikipedia.org/wiki/MapReduce) 说 map() 也应负责“过滤”。

然而,我的理解是 map() 只负责通过“转换”改变数据集的“形式”,而不是“过滤”。

那条线是否令人困惑?

【问题讨论】:

  • 地图是一个非常笼统的术语,可以表示多种含义。因为那是 MapReduce 的 wiki,我假设这意味着在使用 Hadoop 时,map 阶段比在 Spark 中运行 map() 函数更大,它是整个处理单个工作单元。
  • 是的,没错。但事实上,Spark 也利用了“MapReduce 框架”,所以我想知道通过 Spark map() 方法执行业务特定的过滤逻辑如何?
  • 这不是 Spark 的工作方式。大 map 阶段和 reduce 阶段之间没有逻辑上的分离(与 MapReduce 不同,MapReduce 要求您保留 Map 阶段的任何输出以从 Reduce 中读取它)。 Spark 作业包含一组应用于分布式数据集的转换。其中一种转换可以是filter 转换。
  • 我现在可以看到,与 MapReduce(例如,Hadoop Job-Tracker)不同,Spark“驱动程序管理器”允许跨工作节点并行执行“map() 和 reduce 函数。MapReduce,不支持这种风格的 map()/reduce() 执行,而是 MapReduce 先完成 map()-stage,然后切换到“reduce_stage”。有趣的是,未来 Spark 也会支持这种风格的“grouped reduce” ()" 执行,借助"shuffle() 转换(参考#people.eecs.berkeley.edu/~franklin/Papers/hotcloud.pdf)。

标签: hadoop apache-spark mapreduce


【解决方案1】:

关于纯 map-reduce(本 wiki 所指),在 map 阶段进行过滤是可行的方法:

  • 你没有预处理之前地图阶段
  • 应尽可能减少数据,以减轻 shuffle-and-sort 阶段的数据负载
  • 因此,map 是根据需要应用业务逻辑过滤的地方

基本上,由于您只实现了map和reduce,您也可以将其解释为:给定map和reduce阶段,在_map_中执行业务过滤,因为_reduce_中的过滤会通过集群发送很多不必要的数据。

希望它更清楚。

在引用 spark 的评论之后进行编辑。

注意,spark 流 API 中的 map()-function 与 map-reduce 中的 map-function 完全不同。

不幸的巧合,它们被称为相同的,因为 spark 在 map-reduce(或 yarn)复杂性上分层了一个类似流的 API,传统上它具有 map()-function,它是函数式的概念编程。该地图功能也没有任何与发射步骤类似的东西。

因此:map-reduce 中的 map(除了 map 和 reduce,没有其他功能 - 检查您发布的链接中的示例)应该进行过滤。请注意,map-reduce 中的映射对于每个输入都有 0 .. n 个输出。

Spark 或其他类型的流 API 中的 Map 应该只进行从一种类型到另一种类型的转换。 (一个输入导致一个输出。)

【讨论】:

  • 这在 Hadoop 的上下文中听起来是正确的。但是对于 Spark,我们有 Method: filter(),专门用于过滤,过滤的业务逻辑应该放在里面。
  • 关于mapreduce中的没有其他功能,根据wiki,有partition和compare
  • 这些是 shuffle-and-sort 阶段的一部分,而不是基本 map-reduce 编程方法的一部分。尤其是在映射阶段之后,它们不适合对数据执行过滤。
【解决方案2】:

Map,你传入一个函数,该函数为数组中的每个元素返回一个值。这个函数的返回值代表what an element becomes in our new array

Filter,你传入一个函数,它为每个元素返回 true 或 false。如果您传递的函数对某个元素返回 true,则为 that element is included in the final array

【讨论】:

    猜你喜欢
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 2014-07-23
    相关资源
    最近更新 更多