在2列上进行Scala快速范围查找

时间:2019-07-02 18:51:15

标签: scala apache-spark range lookup

我有一个火花数据帧,正在以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秒,我什至不确定第二个过滤条件是否正在执行(在调试模式下,它总是似乎只执行第一个条件)。有人可以建议我在这里进行更快速,更可靠的查询吗?

谢谢!

0 个答案:

没有答案