首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DBSCAN on spark :哪个实现

DBSCAN on spark :哪个实现
EN

Stack Overflow用户
提问于 2016-03-18 17:39:35
回答 4查看 15.5K关注 0票数 12

我想在星火上做一些DBSCAN。我目前发现了两个实现:

我已经测试了第一个在其github中给出的sbt配置,但是:

  • jar中的函数与文档中的函数或github上的源代码中的函数不一样。例如,我在jar中找不到火车函数。
  • 我设法使用fit函数(在jar中找到)运行测试,但是epsilon的糟糕配置(有点大到大)将代码放入一个无限循环中。

代码:

代码语言:javascript
运行
复制
val model = DBSCAN.fit(eps, minPoints, values, parallelism)

有人设法对第一个图书馆做了些什么吗?

有人测试过第二个吗?

EN

回答 4

Stack Overflow用户

发布于 2017-05-04 15:13:47

请试试埃尔基。因为这是Java,所以应该很容易从Scala调用。

ELKI进行了很好的优化,通过索引,它将扩展到相当大的数据集。

我们试图在我们的基准测试研究中包括其中一个星火实现--但是它内存不足(而且它是唯一一个内存不足的实现……星火和马乌特的k-手段也是最慢的):

汉斯-彼得·克里格尔,埃里希·舒伯特和亚瑟·齐梅克。 运行时评估的(黑色)艺术:我们是比较算法还是实现? 知识和信息系统(知识和信息系统)。2016年,1-38

Neukirchen教授在本技术报告中对DBSCAN的并行实现进行了基准测试:

赫尔穆特·纽基兴 大数据和高性能计算范式DBSCAN空间聚类实现的调查与性能评估

显然,他让一些星火的实现工作起来了,但注意到:

其结果是毁灭性的: Apache的实现没有一个接近HPC实现。特别是在较大(但仍相当小)的数据集上,大多数数据集完全失败,甚至没有提供正确的结果--

在此之前:

当我们在使用集群的所有可用内核的同时运行任何"Spark“实现时,我们经历了内存不足的异常。

(另外,"Spark“在928个核上花费了2406秒,ELKI在一个核上为较小的基准值花费了997秒-另一个Spark实现也不太好,特别是它没有返回正确的结果.)

“星火上的DBSCAN”没有崩溃,而是返回了完全错误的集群。 虽然“星火上的DBSCAN”完成得更快,但它提供了完全错误的集群结果。由于DBSCAN实现的DBSCAN实现的运行次数已经达到了最大的核心数,因此我们没有使用较低数量的内核执行测量。

您可以将double[][]数组包装为ELKI数据库:

代码语言:javascript
运行
复制
// Adapter to load data from an existing array.
DatabaseConnection dbc = new ArrayAdapterDatabaseConnection(data);
// Create a database (which may contain multiple relations!)
Database db = new StaticArrayDatabase(dbc, null);
// Load the data into the database (do NOT forget to initialize...)
db.initialize();

// Squared Euclidean is faster than Euclidean.
Clustering<Model> c = new DBSCAN<NumberVector>(
  SquaredEuclideanDistanceFunction.STATIC, eps*eps, minpts).run(db);

for(Cluster<KMeansModel> clu : c.getAllClusters()) {
  // Process clusters
}

还请参阅:Java示例 (特别是如何将DBID映射回行索引)。为了获得更好的性能,将索引工厂(如new CoverTree.Factory(...))作为第二个参数传递给StaticArrayDatabase构造函数。

票数 10
EN

Stack Overflow用户

发布于 2018-03-09 07:34:41

我成功地在我的project.Actually中使用了第二个库(project.Actually),我不能按如下方式使用它:

代码语言:javascript
运行
复制
libraryDependencies += "org.alitouka" % "spark_dbscan_2.10" % "0.0.4"

resolvers += "Aliaksei Litouka's repository" at "http://alitouka-public.s3-website-us-east-1.amazonaws.com/"

相反,我下载代码并更新它以激发2.2.1 version.Besides,其中一些库应该是added.Finally,将代码添加到我的项目中,它可以工作!

票数 4
EN

Stack Overflow用户

发布于 2018-02-09 08:59:19

我测试了https://github.com/irvingc/dbscan-on-spark,可以说它消耗了大量的内存。对于分布平滑的400 K数据集,我使用了-Xmx12084m,即使在这种情况下,它的工作时间也太长(>20分钟)。另外,它只是二维的。我用的是maven,而不是sbt。

我还测试了第二个实现。这仍然是我发现的最好的。遗憾的是,提交人自2015年以来不再支持这一观点。它真的花了一些时间来提高版本的火花和解决版本冲突。我需要它部署到aws上。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36090906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档