我有一个大数据问题,我对并行处理和大数据的经验非常有限.我有数百万行,包括纬度和经度数据以及几个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可以有所作为.