我有20GB的数据需要处理,所有这些数据都适合我的本地机器.我打算使用Spark或Scala并行收集来对这些数据实现一些算法和矩阵乘法.
由于数据适合单个机器,我应该使用Scala并行集合吗?
这是真的:并行任务的主要瓶颈是将数据传送到CPU进行处理,因为所有数据都尽可能接近CPU,因此Spark不会带来任何显着的性能提升吗?
即使它只是在一台机器上运行,Spark也会设置并行任务的开销,所以这种开销在这种情况下是多余的?
很难提供一些非显而易见的指令,比如你有你的数据并且没有达到80%的内存和......,然后使用本地模式.说到这一点,有一些要点,即使你的数据适合一个人的机器内存,一般来说,这可能会让你使用spark:
真正密集的CPU处理,从我的头脑,它可能是复杂的文本解析
稳定性 - 假设您有多个处理阶段,并且在单台机器出现故障时您不希望丢失结果.特别重要的是,如果你有经常性的计算,而不是一次性的查询(这样,你花费在桌子上花费的时间可能会得到回报)
流 - 你以流方式从某个地方获取数据,虽然它的快照适合单机,但你必须以某种方式编排它
在你的特殊情况下
因此,由于所有数据都与CPU相近,因此Spark不会带来任何显着的性能提升
当然不是,Spark不是巫术魔术,不知何故可以让你的数据更接近CPU,但它可以帮助你在机器之间扩展,从而缩小CPU(点#1)
即使它只是在一台机器上运行,Spark也会设置并行任务的开销,所以这种开销在这种情况下是多余的?
我可能听起来很明显,但是
考虑#2和#3,你需要它们吗?如果是的话,去火花或其他东西
如果不是,请以愚蠢的方式实施处理(并行集合)
简介并看一看.您的处理是否受CPU限制?你可以加快它,没有很多调整?如果不是,请去火花.
在我为什么要使用Spark的列表中还有[厚颜无耻]第4点)?.这是炒作 - Spark是一种非常性感的技术,很容易"销售"给你的开发者(它是大数据的最前沿)和公司(你的老板,如果你正在建立自己的产品,你的客户如果你正在为别人建造产品).