You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sedona.apache.org by ma...@apache.org on 2021/03/29 20:47:48 UTC
[incubator-sedona] 02/03: Refactor actual registration to
SedonaKryoRegistratorHelper Create SedonaWKBKryoRegistrator for WKB support
This is an automated email from the ASF dual-hosted git repository.
malka pushed a commit to branch Sedona-17_Shape&WKBSerDe
in repository https://gitbox.apache.org/repos/asf/incubator-sedona.git
commit bcf45a05ca559f0c5df46e2068ff6f1e398ed5fa
Author: Netanel Malka <ne...@gmail.com>
AuthorDate: Mon Mar 29 23:22:08 2021 +0300
Refactor actual registration to SedonaKryoRegistratorHelper
Create SedonaWKBKryoRegistrator for WKB support
---
.../sedona/core/serde/SedonaKryoRegistrator.java | 31 +++++----------
...rator.java => SedonaKryoRegistratorHelper.java} | 43 +++++++++++----------
.../core/serde/SedonaWKBKryoRegistrator.java | 45 ++++++++++++++++++++++
3 files changed, 76 insertions(+), 43 deletions(-)
diff --git a/core/src/main/java/org/apache/sedona/core/serde/SedonaKryoRegistrator.java b/core/src/main/java/org/apache/sedona/core/serde/SedonaKryoRegistrator.java
index 57894ea..5843b7d 100644
--- a/core/src/main/java/org/apache/sedona/core/serde/SedonaKryoRegistrator.java
+++ b/core/src/main/java/org/apache/sedona/core/serde/SedonaKryoRegistrator.java
@@ -23,7 +23,7 @@ import com.esotericsoftware.kryo.Kryo;
import org.apache.log4j.Logger;
import org.apache.sedona.core.geometryObjects.Circle;
import org.apache.sedona.core.geometryObjects.GeometrySerde;
-import org.apache.sedona.core.geometryObjects.SpatialIndexSerde;
+import org.apache.sedona.core.serde.spatialindex.SpatialIndexSerde;
import org.apache.spark.serializer.KryoRegistrator;
import org.locationtech.jts.geom.Envelope;
import org.locationtech.jts.geom.GeometryCollection;
@@ -36,31 +36,18 @@ import org.locationtech.jts.geom.Polygon;
import org.locationtech.jts.index.quadtree.Quadtree;
import org.locationtech.jts.index.strtree.STRtree;
+/**
+ * Register Kryo classes using the Geometry Serde(using the ShapeFile serialization)
+ * and SpatialIndexSerde for index objects
+ */
public class SedonaKryoRegistrator
- implements KryoRegistrator
-{
-
- final static Logger log = Logger.getLogger(SedonaKryoRegistrator.class);
+ implements KryoRegistrator {
@Override
- public void registerClasses(Kryo kryo)
- {
+ public void registerClasses(Kryo kryo) {
GeometrySerde serializer = new GeometrySerde();
- SpatialIndexSerde indexSerializer = new SpatialIndexSerde(serializer);
-
- log.info("Registering custom serializers for geometry types");
+ SpatialIndexSerde indexSerializer = new SpatialIndexSerde();
- kryo.register(Point.class, serializer);
- kryo.register(LineString.class, serializer);
- kryo.register(Polygon.class, serializer);
- kryo.register(MultiPoint.class, serializer);
- kryo.register(MultiLineString.class, serializer);
- kryo.register(MultiPolygon.class, serializer);
- kryo.register(GeometryCollection.class, serializer);
- kryo.register(Circle.class, serializer);
- kryo.register(Envelope.class, serializer);
- // TODO: Replace the default serializer with default spatial index serializer
- kryo.register(Quadtree.class, indexSerializer);
- kryo.register(STRtree.class, indexSerializer);
+ SedonaKryoRegistratorHelper.registerClasses(kryo, serializer, indexSerializer);
}
}
diff --git a/core/src/main/java/org/apache/sedona/core/serde/SedonaKryoRegistrator.java b/core/src/main/java/org/apache/sedona/core/serde/SedonaKryoRegistratorHelper.java
similarity index 65%
copy from core/src/main/java/org/apache/sedona/core/serde/SedonaKryoRegistrator.java
copy to core/src/main/java/org/apache/sedona/core/serde/SedonaKryoRegistratorHelper.java
index 57894ea..c32a3dc 100644
--- a/core/src/main/java/org/apache/sedona/core/serde/SedonaKryoRegistrator.java
+++ b/core/src/main/java/org/apache/sedona/core/serde/SedonaKryoRegistratorHelper.java
@@ -20,36 +20,36 @@
package org.apache.sedona.core.serde;
import com.esotericsoftware.kryo.Kryo;
+import com.esotericsoftware.kryo.Serializer;
import org.apache.log4j.Logger;
import org.apache.sedona.core.geometryObjects.Circle;
import org.apache.sedona.core.geometryObjects.GeometrySerde;
-import org.apache.sedona.core.geometryObjects.SpatialIndexSerde;
-import org.apache.spark.serializer.KryoRegistrator;
-import org.locationtech.jts.geom.Envelope;
-import org.locationtech.jts.geom.GeometryCollection;
-import org.locationtech.jts.geom.LineString;
-import org.locationtech.jts.geom.MultiLineString;
-import org.locationtech.jts.geom.MultiPoint;
-import org.locationtech.jts.geom.MultiPolygon;
-import org.locationtech.jts.geom.Point;
-import org.locationtech.jts.geom.Polygon;
+import org.apache.sedona.core.geometryObjects.WKBGeometrySerde;
+import org.apache.sedona.core.serde.spatialindex.SpatialIndexSerde;
+import org.locationtech.jts.geom.*;
import org.locationtech.jts.index.quadtree.Quadtree;
import org.locationtech.jts.index.strtree.STRtree;
-public class SedonaKryoRegistrator
- implements KryoRegistrator
-{
-
- final static Logger log = Logger.getLogger(SedonaKryoRegistrator.class);
+/**
+ * Register Kryo classes by the type of geometry serde mechanism
+ */
+public class SedonaKryoRegistratorHelper {
- @Override
- public void registerClasses(Kryo kryo)
- {
- GeometrySerde serializer = new GeometrySerde();
- SpatialIndexSerde indexSerializer = new SpatialIndexSerde(serializer);
+ final static Logger log = Logger.getLogger(SedonaWKBKryoRegistrator.class);
+ public static void registerClasses(Kryo kryo, Serializer geometrySerdeType, SpatialIndexSerde indexSerializer) {
log.info("Registering custom serializers for geometry types");
+ Serializer serializer;
+ if (geometrySerdeType instanceof WKBGeometrySerde) {
+ serializer = new WKBGeometrySerde();
+ } else if (geometrySerdeType instanceof GeometrySerde) {
+ serializer = new GeometrySerde();
+ } else
+ throw new UnsupportedOperationException(String.format("Geometry Serde: %s is not supported",
+ geometrySerdeType.getClass().getName())
+ );
+
kryo.register(Point.class, serializer);
kryo.register(LineString.class, serializer);
kryo.register(Polygon.class, serializer);
@@ -59,8 +59,9 @@ public class SedonaKryoRegistrator
kryo.register(GeometryCollection.class, serializer);
kryo.register(Circle.class, serializer);
kryo.register(Envelope.class, serializer);
- // TODO: Replace the default serializer with default spatial index serializer
+
kryo.register(Quadtree.class, indexSerializer);
kryo.register(STRtree.class, indexSerializer);
}
+
}
diff --git a/core/src/main/java/org/apache/sedona/core/serde/SedonaWKBKryoRegistrator.java b/core/src/main/java/org/apache/sedona/core/serde/SedonaWKBKryoRegistrator.java
new file mode 100644
index 0000000..939c262
--- /dev/null
+++ b/core/src/main/java/org/apache/sedona/core/serde/SedonaWKBKryoRegistrator.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.sedona.core.serde;
+
+import com.esotericsoftware.kryo.Kryo;
+import org.apache.log4j.Logger;
+import org.apache.sedona.core.geometryObjects.Circle;
+import org.apache.sedona.core.serde.spatialindex.SpatialIndexSerde;
+import org.apache.sedona.core.geometryObjects.WKBGeometrySerde;
+import org.apache.spark.serializer.KryoRegistrator;
+import org.locationtech.jts.geom.*;
+import org.locationtech.jts.index.quadtree.Quadtree;
+import org.locationtech.jts.index.strtree.STRtree;
+
+/**
+ * Register Kryo classes using the WKB Geometry Serde and SpatialIndexSerde for index objects
+ */
+public class SedonaWKBKryoRegistrator
+ implements KryoRegistrator {
+
+ @Override
+ public void registerClasses(Kryo kryo) {
+ WKBGeometrySerde serializer = new WKBGeometrySerde();
+ SpatialIndexSerde indexSerializer = new SpatialIndexSerde();
+
+ SedonaKryoRegistratorHelper.registerClasses(kryo, serializer, indexSerializer);
+ }
+}