使用SparkSQL从IP地址从IP地址检索GEO位置(区域或大陆)



我有一个带有一组IP地址的表列,我需要如下所述找出其区域/大陆。

------------------------------------------------------
ip_address      |    region
------------------------------------------------------
217.100.34.222  |   North Holland

为此,我从ip2location.com下载了一个IP-corgion-region-city数据库,但其表格和值如下所示。

-----------------------------------------------------
ip_from  | ip_to  | country_code  |  country_name  | region_name  |  city_name
-----------------------------------------------------
16777216 | 16777471 | AU          | Australia      | Queensland   | Brisbane

我如何能够将ip_address列转换为decimal number,如IP2Location数据库中所示,并从中检索数据,还是有更好的方法来执行此过程以从ip address中检索geo location

谢谢。

更好的方法来检索地理位置 从IP地址使用SparkSQL?

选项1

databricks在广告分析方面所述,这是一种方式。请查看完整的文章-An-ultrupted guide-to-Analytics.html

直接从Spark:

直接进行Web服务调用
# Obtain the unique agents from the accesslog table
ipaddresses = sqlContext.sql("select distinct ip1 from 
 accesslog where ip1 is not null").rdd
# getCCA2: Obtains two letter country code based on IP address
def getCCA2(ip):
  url = 'http://freegeoip.net/csv/' + ip
  str = urllib2.urlopen(url).read()
  return str.split(",")[1]
# Loop through distinct IP addresses and obtain two-letter country codes
mappedIPs = ipaddresses.map(lambda x: (x[0], getCCA2(x[0])))

可以通过查找以后扩展两个字母的国家代码

选项2 :Hive Table方法,例如带有Scala伪代码的示例(而不是Web服务方法。)

当您已经下载时,将数据摄取到蜂巢表中。

val ipsdf = hiveContext.sql(s"select ip from iptable ")
val countriesWithIp = hiveContext.sql(s"select countryname,ip from countriesWithIPs")
countriesWithIpAddrMapped = ipsdf.join(countriesWithIp , ipsdf("ip")===countriesWithIp("ip"), "inner" )
countriesWithIpAddrMapped.show();

相关内容

  • 没有找到相关文章

最新更新