我刚开始接触 Apache Spark,并一直在研究其在项目中的应用。该项目中的一个瓶颈是我必须对一个小数据集进行数千次的迭代拟合,拟合多个不同的模型(或者是同一个模型但调整了超参数)。每个数据集大约包含100到1000行,以及10,000到100,000列,因此单次拟合在一台机器(或工作节点)上很容易处理。好的一点是,这些任务可以彼此独立执行,因此它们是非常适合并行处理的。
由于将数据集分割成RDD并使用大量节点可能带来的收益有限,且任何时候都可能有多节点在工作,因此,与其让它们为每次拟合协同工作,不如让多个工作节点独立操作似乎更有效。一个选择是,在每个工作节点上将相同的数据集缓存到内存中,让它们独立操作以完成所有必须进行的拟合。像HTCondor+云调度器或star-cluster这样的工具似乎能够很好地处理这种任务,但Apache Spark在其他领域有很多优势,所以我对其在整个项目中的应用很感兴趣。
我似乎找不到一个很好的答案来确定Apache Spark是否有功能来处理这样的问题。这个问题似乎涉及了类似的主题,但以我目前对Spark有限的了解,我无法从提到的库的文档中判断这是否能帮助我解决这个问题。最初知道这是否是合适的工具,将有助于我避免浪费时间学习一个后来发现无法满足我需求的工具。
回答:
这种情况得到了很好的支持,但这肯定不是我们通常讨论的标准使用案例。如果你的数据真的很小(听起来确实如此),你可以考虑使用broadcast
函数将其提供给所有工作节点,然后构建一个包含你想要尝试和使用的不同参数的RDD。然后你可以map
处理不同的参数,并在集群的多个节点上训练你的模型。