これで、テキスト ファイル (十分な大きさ) にデータのセットができました。各行が四角形を表しているとします。
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
ですか (メソッドを使用するだけです)。
もう 1 つの質問は、入力ファイルが十分に大きく、たとえば、GB または TB スケールでHDFS
、Apache Spark
.
最後に、R ツリーをファイルに保存して保存し、後で使用するために回復するというアイデアはありますか?
編集:ファイル
を読み取っ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)))})
を呼び出しinsert
てforeach
、 のサイズを印刷するとstrtree
、 はゼロです!
insert
内部のメソッドがforeach
機能しないのはなぜですか? 私は何か見落としてますか?