【问题标题】:Does scala closure feature help Apache sparkscala 闭包功能是否有助于 Apache spark
【发布时间】:2019-06-20 22:57:11
【问题描述】:

前几天我和一位同事讨论,他随便提到,除了内存计算之外,Scala 中的闭包是在 Spark 上执行应用程序如此高效的原因。我确实在官方 spark 文档中找到了以下文本,但不太明白。

为了执行作业,Spark 将 RDD 操作的处理分解为任务,每个任务由一个 executor 执行。在执行之前,Spark 会计算任务的闭包。闭包是那些必须对执行程序可见的变量和方法才能在 RDD 上执行计算(在本例中为 foreach())。这个闭包被序列化并发送到每个执行器。

任何帮助(指向其他网络链接、解释、任何参考)都受到高度重视。

【问题讨论】:

    标签: scala apache-spark closures


    【解决方案1】:

    “计算任务闭包”并将其发送给每个执行者背后的想法是大数据的前提之一,即将计算发送到数据所在的位置比将数据发送到计算更快/更容易

    【讨论】:

    • 谢谢阿农。此外,关于“闭包是执行者在 RDD 上执行其计算必须可见的那些变量和方法”语句。是指FP/Scala中闭包的概念吗?
    • 我得到了答案!在这里添加仅供参考。 stackoverflow.com/questions/32015547/…
    【解决方案2】:

    TL;DR不。性能和闭包序列化是正交的。

    能够计算和序列化闭包(几乎不是 Scala 特有的功能)的主要优势在于它可以简化编程体验,尤其是在交互模式下。

    尽管如此,像 Spark 这样的系统可以在没有此类功能的情况下轻松开发,而不会造成任何性能损失。需要注意的是,用户必须明确声明每个任务的依赖关系。使用这种模型的项目例子很多,效果很好。

    【讨论】:

    • @user10976582 spark 文档中提到的闭包与 Scala 中的闭包无关。我说的对吗?
    猜你喜欢
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    • 2010-12-30
    • 1970-01-01
    相关资源
    最近更新 更多