在Amazon RDS上安装Kmeans PostgreSQL扩展

6
我参与了一些Django项目,我们使用GeoDjango处理地理数据。我按照AWS文档的说明安装了PostGis。
我们在地图上有很多点(标记),需要对它们进行聚类。
我找到了一个库anycluster。这个库需要在Postgre数据库中安装名为kmeans-postgresql的PostgreSQL扩展程序。
但是我的数据库位于Amazon RDS上,我无法通过SSH连接到数据库以安装扩展程序……
有人知道我如何在Amazon RDS数据库上安装kmeans-postgresql扩展程序吗?
或者你能否为我提供其他聚类方式的建议?
2个回答

5
K-Means是一种非常复杂的计算方法,可用于数据挖掘和聚类分析(您可以在维基百科页面https://en.wikipedia.org/wiki/K-means_clustering上了解更多信息)。当处理许多点时,它具有很大的复杂度。PostgreSQL的K-Means扩展http://pgxn.org/dist/kmeans/doc/kmeans.html是用C编写并编译在数据库机器中。与plpgsql过程相比,这带来了更好的性能。不幸的是,正如@estevao_lucas所回答的那样,这个扩展在Amazon RDS中没有启用。
如果您真的需要k-means结果,我翻译了Joni Salonen在http://jonisalonen.com/2012/k-means-clustering-in-mysql/创建的实现,并将其更改为plpgsql https://gist.github.com/thiagomata/a9737c3455d6248bef9f。此函数使用临时表。如果您想要,可以将其更改为仅使用Pins数组。

但是,如果你只需要在地图上显示一些点,你可能会对一个将结果分组成[x,y]矩阵的更快、更简单的函数感到满意。我创建了这样的函数,因为kmeans函数处理我的数据库(有超过400K个元素)需要太长时间。所以这个实现速度真的很快,但是没有你从K-means模块期望的所有功能。除此之外,这个网格函数 https://gist.github.com/thiagomata/18ea14853998468c1a1d 在目标是在地图上显示大量点时返回非常好的结果。 Grid Result示例


谢谢!你的函数非常有用!我决定不使用k-means,因为我需要动态解决方案。而且我必须在服务器端对我的标记进行聚类。我的标记经常被用户过滤。我的解决方案基于Quadtree。每个标记都有它的四叉树编码(纬度、经度是恒定的)。所以你可以通过PostGis和一个小的SQL请求查询它并进行聚类。 - Anton

1
您可以在Amazon RDS上安装支持的扩展,但Kmeans并不受支持。
错误:Amazon RDS不支持"Kmeans"扩展。 详细信息:安装"Kmeans"扩展失败,因为它不在Amazon RDS支持的扩展列表中。 提示:Amazon RDS允许具有rds_superuser角色的用户安装支持的扩展。请参见:SHOW rds.extensions; alexandria_development=> SHOW rds.extensions
RDS扩展: btree_gin, btree_gist, chkpass, citext, cube, dblink, dict_int, dict_xsyn, earthdistance, fuzzystrmatch, hstore, intagg, intarray, isn, ltree, pgcrypto, pgrowlocks, pg_prewarm, pg_stat_statements, pg_trgm, plcoffee, plls, plperl, plpgsql, pltcl, plv8, postgis, postgis_tiger_geocoder, postgis_topology, postgres_fdw, sslinfo, tablefunc, test_parser, tsearch2, unaccent, uuid-ossp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接