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 <[email protected]> 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); + } +}
