我有一个带有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/