gpt4 book ai didi

apache-spark - JTS 拓扑套件中的 STRtree : bulk load data and build index

转载 作者:行者123 更新时间:2023-12-04 05:27:25 24 4
gpt4 key购买 nike

现在我在文本文件中有一组数据(足够大),假设每一行代表一个矩形:

x1,y1,x2,y2

读取文件后,如何使用 http://www.vividsolutions.com/jts/javadoc/index.html 批量加载和构建 R 树索引? ?

我查看了它的API,好像只有insert可以在批量加载时使用。

这是我的测试代码:

    STRtree rtree = new STRtree();

rtree.insert(new Envelope(1.0,2.0,1.2,3.4),new Integer(1));
rtree.insert(new Envelope(4.0,3.2,1.9,4.4),new Integer(2));
rtree.insert(new Envelope(3.4,3.8,2.2,5.2),new Integer(3));
rtree.insert(new Envelope(2.1,5.3,5.2,3.6),new Integer(4));
rtree.insert(new Envelope(4.2,2.2,2.9,10.3),new Integer(5));

List<Object> list = rtree.query(new Envelope(1.4,5.6,2.0,3.0));

R树索引的构建方式是否正确(使用insert方法)?

另一个问题是,假设输入文件足够大,例如 GB 甚至 TB 规模,存储在 HDFS 中,在这种情况下,我想要一个基于 Apache Spark 的并行版本的代码.

最后,有什么想法可以将 R-tree 保存到文件中进行存储,以便恢复以备后用吗?

编辑:现在我读了HDFS文件来建立索引,这是我的代码:

    val inputDataPath = "hdfs://localhost:9000/user/chenzhongpu/testData.dat"
val conf = new SparkConf().setAppName("Range Query")

// notice that: the function names for queries differ accoss systems.
// here we simply refer intersect.

val sc = new SparkContext(conf)

val inputData = sc.textFile(inputDataPath).cache()

val strtree = new STRtree

inputData.foreach(line => {val array = line.split(",").map(_.toDouble); strtree.insert(new Envelope(array(0),array(1),array(2),array(3)),
new Rectangle(array(0),array(1),array(2),array(3)))})

我调用insertforeach ,当我打印 strtree 的大小时, 为零!

为什么 insert里面的方法foreach不起作用?我错过了什么吗?

最佳答案

您构建的一切看起来都正确,STRTree 执行批量加载直到您查询,之后它不允许您添加或删除节点。如果您想将此与 apache spark 并行化,您可以制作一个自定义分区程序(类似于范围分区程序),将您的区域分区为一个大网格,然后为每个分区运行一个 STRTree。在 spark(和标准 java)中,您可以轻松地将 STRTree 保存到文件中,因为它实现了可序列化。

RangePartioner 的代码非常复杂,因为它对输入数据进行采样并创建范围的概率分区,如果你已经知道你的最大界限,你可以通过根据你想要的并行性制作网格来做一些更简单的事情(分区程序基本上可以工作,通过找到哪个部分几何图形所在的网格并将所有几何图形发送到该分区,分区程序也可能使用 STRTree 来提高速度)

还有一个建议,为简单起见,您可以使用 spark 中的标准 RangePartitioner 仅在 x 或 y 上对范围进行分区,但使用自定义的 RangePartitioner 可能会更好

关于apache-spark - JTS 拓扑套件中的 STRtree : bulk load data and build index,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29113702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com