我正在尝试在Spark中实现机器学习算法。基本思路是将数据分成N个部分,分别在每个数据集分区上学习N个单独的模型。在预测期间,我们轮询这些N个模型并获取它们的输出,然后将它们组合起来。
a) 将数据分区为N个部分,我们使用
有更好的设计方式吗?
a) 将数据分区为N个部分,我们使用
repartition(N)
b) 在每个分区上学习模型,我们使用mapPartitionsWithIndex
问题在于,多个分区映射到同一台物理机器上,导致在同一物理节点上启动多个模型构建(由mapPartitionsWithIndex
调用),从而使该节点耗尽内存(我们已经达到了执行器内存的最大值)。有更好的设计方式吗?