我想在spark中执行我的数据的geoip查找。为此,我使用MaxMind的geoIP数据库。如何在spark中执行初始化?
我想要做的是在每个分区上初始化一次geoip数据库对象,然后用它来查找与IP地址相关的城市。
spark对每个节点都有一个初始化阶段,还是应该检查一个实例变量是否未定义?如果是,请在继续之前对它进行初始化?例如。类似的信息(这是蟒蛇,但我希望有一个解决方案阶):
class IPLookup(object):
database = None
def getCity(self, ip):
if not database:
self.database = self.initialise(geoipPath)
...
当然,这样做需要的火花将连载整个对象,该文档警告反对的东西。
我试过使用广播变量。但它没有奏效。可能是因为com.maxmind.geoip.LookupService不可序列化。我尝试使用SparContext.addFile方法,而且工作正常。添加文件GeoIPCity.dat和GeoIPASNum.dat – 2015-03-10 18:46:16