在分布式系统中实现DBSCAN

我有一个大数据问题,我对并行处理和大数据的经验非常有限.我有数百万行,包括纬度和经度数据以及几个ID.对于每个ID,我可以拥有10000到10000万的数据.

我正在实现基于密度的聚类算法(DBSCAN)来解决一些业务需求.聚类算法针对每个ID独立运行.

目前的实施;

当前的实现基于使用sklearn机器学习库的Python代码,但是需要一天或更长时间来执行(聚类其他业务逻辑)appx 5000万数据点.

我可以优化python代码并减少时间,但我正在寻找更可行的sollution.

可用性

我有一个分布在appx 20机器上的火花簇,但是pyspark没有实现DBSCAN.经过一些搜索,我可以找到一些scala imlementation但它们似乎不太可靠.我搜索的网址是.
https://github.com/irvingc/dbscan-on-spark

DBSCAN on spark : which implementation

因为我的所有代码都是用python编写的,所以我想坚持使用更加pythonic的解决方案.

就像我提到的那样,聚类算法针对每个设备独立运行,减少时间的一种方法是将每个ID的计算并行地分配给所有20台机器.这样我至少可以获得20倍的性能提升.但我不知道如何实现这一目标.我能想到的只是MapReduce.

我对任何更强大的溶剂持开放态度.任何帮助将不胜感激.

解决方法:

由于序列化,pySpark的开销不可忽略.如果您想要非常快,请使用尽可能少的层来减少开销.

我只是将数据拆分成所需的分区,然后使用你能找到的最快的DBSCAN在不同的节点上独立处理它们(基准测试!确保启用数据索引,并检查结果的正确性.报告了一个Spark版本结果不正确).最近有一篇基准测试论文观察到DBSCAN实现的1000x运行时差异.所以另一个DBSCAN可以有所作为.

上一篇:Machine Learning Technologies(10月20日)


下一篇:机器学习