我有一个大数据问题,我对并行处理和大数据的经验非常有限.我有数百万行,包括纬度和经度数据以及几个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可以有所作为.
原文地址:https://codeday.me/bug/20190705/1390336.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。