Voglio eseguire ricerche geoip dei miei dati in spark. Per farlo uso il database geoIP di MaxMind.Come eseguire l'inizializzazione nella scintilla?
Quello che voglio fare è inizializzare un oggetto di database geoip una volta su ogni partizione, e in seguito usarlo per cercare la città relativa ad un indirizzo IP.
La scintilla ha una fase di inizializzazione per ogni nodo, o dovrei invece verificare se una variabile di istanza non è definita, e in caso affermativo, inizializzarla prima di continuare? Per esempio. qualcosa di simile (questo è python ma voglio una soluzione Scala):
class IPLookup(object):
database = None
def getCity(self, ip):
if not database:
self.database = self.initialise(geoipPath)
...
Naturalmente, facendo questo richiede scintilla puntate tutto l'oggetto, cosa che la documentazione in guardia contro.
Ho provato a utilizzare una variabile di trasmissione. Ma non ha funzionato. Forse perché com.maxmind.geoip.LookupService non è serializzabile. Ho provato a utilizzare invece il metodo SparContext.addFile e questo ha funzionato correttamente. Aggiunta dei file GeoIPCity.dat e GeoIPASNum.dat –