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);
+    }
+}