首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >蜂窝ip地理编码(交叉连接半大表)

蜂窝ip地理编码(交叉连接半大表)
EN

Stack Overflow用户
提问于 2014-01-23 00:49:58
回答 1查看 1.3K关注 0票数 2

我的问题。

我需要500000个不同的IP地址来进行地理编码。地理代码查找表有一个ip-从和ip到范围,我必须与之进行比较,一个180万行的表。

所以基本上是:

代码语言:javascript
复制
select *
/*+ MAPJOIN(a) */
from ip_address a
cross join  ip_lookup b
where a.AddressInt >= b.ip_from and a.AddressInt <= b.ip_to;

在aws EMR上,我运行了一个10 m1大的集群,在交叉连接阶段,它在20分钟内停留在0%,但有趣的是:

代码语言:javascript
复制
Stage-5: number of mappers: 1; number of reducers: 0

问题: 1)有人有比交叉连接更好的想法吗?我不介意引发更多的实例,但我怀疑这会有帮助,2)我是否真的在内存中存储ip_addresses时做了一个交叉映射连接?

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2014-01-23 11:34:32

去年我遇到了你的问题。

由于我的地理代码表安装在RAM中,下面是我所做的:

  1. 我编写了Java类(我们称之为GeoCoder),它将磁盘中的地理代码信息读入内存中,并在内存中进行地理编码。
  2. 我已经将文件geocode.info添加到分布式缓存中(Hive add file命令就是这样做的)。
  3. 我编写了UDF,它在evaluate方法中创建(或者如果已经创建) GeoCoder实例。UDF可以通过getClass().getClassLoader().getResource("geocode.info").getFile()在分布式缓存中获取文件的本地路径。
  4. 现在我有了geocode.info的本地路径(现在它是一个普通文件),其余的都是历史。

这个方法可能有点过分(150行Java),但对我来说很管用。

此外,我假设您确实需要在任务中使用Hadoop (就像我所做的那样)。500000个IP的地理编码可能很快就能在笔记本上完成。

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

https://stackoverflow.com/questions/21297229

复制
相关文章

相似问题

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