scala - 如果数据适合一台机器,使用 Spark 有意义吗?

标签 scala parallel-processing apache-spark

我有 20GB 的数据需要处理,所有这些数据都适合我的本地机器。我计划使用 Spark 或 Scala 并行集合来针对这些数据实现一些算法和矩阵乘法。

由于数据适合一台机器,我应该使用 Scala 并行集合吗?

这是真的:并行任务的主要瓶颈是将数据送到 CPU 进行处理,因此由于所有数据都尽可能接近 CPU,因此 Spark 不会带来任何显着的性能改进吗?

即使 Spark 只在一台机器上运行,它也会有设置并行任务的开销,所以在这种情况下这个开销是多余的?

最佳答案

很难提供一些不明显的指令,比如如果你有数据并且没有达到 80% 的内存和......,然后使用本地模式。话虽如此,有几点,一般来说,即使您的数据适合机器内存,也可能使您使用 spark:

  • 真正密集的 CPU 处理,在我的脑海中,它可能是复杂的文本解析
  • 稳定性——假设您有许多处理阶段,并且一旦您的单台机器出现故障,您不想丢失结果。
    如果您有重复计算,而不是一次性查询,这一点尤其重要(这样,您花在表上的时间可能会得到返回)
  • 流——您以流的方式从某处获取数据,虽然它的快照适合单台机器,但您必须以某种方式对其进行编排

  • 在您的特定情况下

    so since all of the data is as close as can be to the CPU Spark will not give any significant performance improvement



    当然不是,Spark 不是一种巫毒魔法,它可以使您的数据更接近 CPU,但它可以帮助您在机器之间进行扩展,从而在 CPU 之间进行扩展(第 1 点)

    Spark will have the overhead setting up parallel tasks even though it will be just running on one machine, so this overhead is redundant in this case ?



    我可能听起来很明显,但是
  • 考虑#2 和#3,你需要它们吗?如果是的话,去 Spark 或其他东西
  • 如果不是,请以愚蠢的方式执行您的处理(并行集合)
  • 配置文件并查看。您的处理是否受 CPU 限制?你能加速它,而不需要很多调整吗?如果没有,那就去 Spark 。

  • 为什么我应该使用 Spark? 的列表中还有 [厚脸皮] 点 4)。这是炒作——Spark 是一种非常性感的技术,它很容易“推销”给你的开发人员(它是大数据的前沿)和公司(你的老板,如果你正在开发自己的产品,你的客户)如果您正在为其他人构建产品)。

    关于scala - 如果数据适合一台机器,使用 Spark 有意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23918037/

    相关文章:

    apache-spark - 如何使用UDF返回多列?

    scala - 用 scala-cats 压平嵌套的 Ior

    scala - 我们应该直接使用 ScalaSignature 吗?

    scala - 在 Scala 中从 Future 中获取数据

    ruby-on-rails - 玩 Scala : Scala object as DAO

    c# - 另一个C#死锁调试问题

    multithreading - 如何处理消息的并行处理?

    apache-spark - 如何使用pyspark从一个月的某一天获取工作日

    c# - 如何在 Windows Phone 上运行并行任务?

    apache-spark - Spark (a la RedShift) 中是否有用于高效连接的数据架构?