У меня есть искровой фрейм данных, который я передаю как Array [Array [String]].
Мое требование заключается в поиске диапазона по 2 столбцам.
Прямо сейчас у меня есть что-то вроде ->
val cols = data.filter(_(0).toLong <= ip).filter(_(1).toLong >= ip).take(1) match {
case Array(t) => t
case _ => Array()
}
Следующий файл данных сохраняется как Array [Array [String]] (за исключением строки заголовка, которую я показал ниже только в качестве ссылки) и передается в функцию фильтра, показанную выше.
пример файла данных ->
startIPInt | endIPInt | lat | lon
676211200 | 676211455 | 37.33053 | -121.83823
16777216 | 16777342 | -34.9210644736842 | 138.598709868421
17081712 | 17081712 | 0 | 0
пример значения для поиска ->
ip = 676211325
на основе диапазона значений startIPInt и endIPInt, я хочу, чтобы остальные строки сопоставления.
Этот поиск занимает 1-2 секунды для каждого, и я даже не уверен, что 2-е условие фильтра выполняется (в режиме отладки всегда кажется, что оно только выполняет 1-е условие). Может кто-нибудь предложить мне более быстрый и надежный поиск здесь?
Спасибо!