我有一个带有ip_address列的配置单元表。如何从该ip_address列中找到国家,城市和邮政编码?

我看到一个udf写道:

https://github.com/edwardcapriolo/hive-geoip

如何在 hive 中利用udf?我可以自己创建函数名称吗?

udf说我们需要单独的数据库:

http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz

如何在Hive上实现该数据库?

任何反馈将不胜感激。

谢谢,

力拓

最佳答案

您可以通过添加jar并创建临时功能(如第一个链接所述)在Hive中利用UDF。

add file GeoIP.dat;
add jar geo-ip-java.jar;
add jar hive-udf-geo-ip-jtg.jar;
create temporary function geoip as 'com.jointhegrid.hive.udf.GenericUDFGeoIP';

您可以将函数名称更改为所需的名称,只需将“临时功能”之后的单词从“geoip”替换为所需的名称。

添加链接到的数据库只需将其下载到UNIX服务器,然后使用gzip解压缩即可。格式为GeoIP.dat后,将其和您下载的jar移到/ users /(您的用户名)/目录中,然后按照上面的说明运行代码。这些文件必须位于您的顶层目录中,或者在添加文件和添加jar语句期间明确定位。我的意思是,例如,必须是add file GeoIP.dat;而不是add file /users/wertz/downloads/GeoIP.dat;

最后,通过查看代码,UDF需要三个参数。第一个参数是IP地址,第二个参数是您要查找的内容(选择似乎是COUNTRY_NAME,COUNTRY_CODE,AREA_CODE,CITY,DMA_CODE,LATITUDE,LONGITUDE,METRO_CODE,POSTAL_CODE,REGION,ORG或ID)和最终值是GeoIP数据库的文件名,希望您没有从GeoIP.dat进行更改

关于hadoop - 实现Hive UDF,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30105555/

10-11 17:38