我需要对大约1400万个用户运行DBSCAN集群,每个用户都有1k个数据点。每个用户都是一个完全独立于其他用户的不同聚类案例。基本上,我有许多小的集群任务。
在一台机器上运行它对我来说是行不通的,即使是在使用python多处理模块并行任务时,因为IO和集群需要很长时间。
我考虑过使用Spark来管理集群上的并行运行,但我认为这可能不适合我的情况,因为DBSCAN不是在MLlib中实现的,而且我不需要并行运行每个集群任务,而是单独运行每个任务。每当我尝试使用Spark原生RDD或Dataframe之外的任何东西时,它显然都必须收集到驱动程序节点的所有数据。
我的问题是,是否有更聪明的解决方案来解决我的问题,而不是简单地在不同的节点上运行许多独立的进程,当每个进程都选择一个用户子集时?
谢谢
发布于 2018-07-16 02:51:27
由于你的用户都是独立的,这显然是一个令人尴尬的并行问题。您希望将同一任务(DBSCAN)运行数百万次。有许多方法可以实现这一点。如果你有一个带锁的网络文件系统,你可以使用Spark (虽然我会考虑使用一个基于Java的工具,比如ELKI -你可能需要确保你在用户上而不是在每个用户内并行),MapReduce,甚至Makefiles带锁。关键因素是您的数据是如何组织的。无论是为所有工作节点并行读取数据,还是通过主节点路由所有数据(bad),都会产生巨大的差异。您需要将数据高效地提供给工作人员,并需要存储聚类结果。
https://stackoverflow.com/questions/51347015
复制相似问题