You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sedona.apache.org by ji...@apache.org on 2023/09/04 20:13:46 UTC

[sedona] branch merge-sql-to-core created (now ab0c70e04)

This is an automated email from the ASF dual-hosted git repository.

jiayu pushed a change to branch merge-sql-to-core
in repository https://gitbox.apache.org/repos/asf/sedona.git


      at ab0c70e04 Merge SQL and core

This branch includes the following new commits:

     new ab0c70e04 Merge SQL and core

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[sedona] 01/01: Merge SQL and core

Posted by ji...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jiayu pushed a commit to branch merge-sql-to-core
in repository https://gitbox.apache.org/repos/asf/sedona.git

commit ab0c70e048307fa7d361122250dc55f2849e3d5e
Author: Jia Yu <ji...@apache.org>
AuthorDate: Mon Sep 4 13:13:31 2023 -0700

    Merge SQL and core
---
 LICENSE                                            |  32 ++---
 R/vignettes/articles/apache-sedona.Rmd             |  12 +-
 R/vignettes/articles/raster.Rmd                    |   2 +-
 .../sedona/common/raster/RasterTestBase.java       |   2 +-
 core/.gitignore                                    |   9 --
 .../scala/org/apache/sedona/core/SparkUtil.scala   |  45 ------
 pom.xml                                            |   6 +-
 python/tests/tools.py                              |   4 +-
 spark-shaded/pom.xml                               |   7 +-
 {sql => spark}/.gitignore                          |   0
 {sql => spark}/common/.gitignore                   |   0
 {core => spark/common}/pom.xml                     |  62 +++++----
 {core => spark/common}/src/.gitignore              |   0
 {core => spark/common}/src/main/.gitignore         |   0
 .../org/apache/sedona/core/enums/GridType.java     |   0
 .../org/apache/sedona/core/enums/IndexType.java    |   0
 .../apache/sedona/core/enums/JoinBuildSide.java    |   0
 .../core/enums/JoinSparitionDominantSide.java      |   0
 .../core/enums/SpatialJoinOptimizationMode.java    |   0
 .../core/formatMapper/EarthdataHDFPointMapper.java |   0
 .../sedona/core/formatMapper/FormatMapper.java     |   0
 .../sedona/core/formatMapper/GeoJsonReader.java    |   0
 .../core/formatMapper/LineStringFormatMapper.java  |   0
 .../core/formatMapper/PointFormatMapper.java       |   0
 .../core/formatMapper/PolygonFormatMapper.java     |   0
 .../apache/sedona/core/formatMapper/RddReader.java |   0
 .../core/formatMapper/RectangleFormatMapper.java   |   0
 .../apache/sedona/core/formatMapper/WkbReader.java |   0
 .../apache/sedona/core/formatMapper/WktReader.java |   0
 .../netcdfParser/HDFSRandomAccessFile.java         |  19 +--
 .../formatMapper/netcdfParser/SerNetCDFUtils.java  |  14 +-
 .../formatMapper/shapefileParser/ShapefileRDD.java |   0
 .../shapefileParser/ShapefileReader.java           |   0
 .../shapefileParser/boundary/BoundBox.java         |   0
 .../boundary/BoundaryInputFormat.java              |   0
 .../boundary/BoundaryRecordReader.java             |   0
 .../fieldname/FieldnameInputFormat.java            |   0
 .../fieldname/FieldnameRecordReader.java           |   0
 .../parseUtils/dbf/DbfParseUtil.java               |   8 +-
 .../parseUtils/dbf/FieldDescriptor.java            |   0
 .../parseUtils/shp/MultiPointParser.java           |   0
 .../parseUtils/shp/PointParser.java                |   0
 .../parseUtils/shp/PolyLineParser.java             |   0
 .../parseUtils/shp/PolygonParser.java              |   0
 .../parseUtils/shp/ShapeFileConst.java             |   0
 .../parseUtils/shp/ShapeParser.java                |   0
 .../parseUtils/shp/ShapeReader.java                |   0
 .../parseUtils/shp/ShapeReaderFactory.java         |   0
 .../shapefileParser/parseUtils/shp/ShapeSerde.java |   0
 .../shapefileParser/parseUtils/shp/ShapeType.java  |   0
 .../parseUtils/shp/ShpFileParser.java              |  14 +-
 .../parseUtils/shp/TypeUnknownException.java       |   0
 .../shapefileParser/shapes/CombineShapeReader.java |   0
 .../shapefileParser/shapes/DbfFileReader.java      |   0
 .../shapefileParser/shapes/PrimitiveShape.java     |   0
 .../shapefileParser/shapes/ShapeFileReader.java    |   0
 .../shapefileParser/shapes/ShapeInputFormat.java   |   0
 .../shapefileParser/shapes/ShapeKey.java           |   0
 .../shapefileParser/shapes/ShpRecord.java          |   0
 .../sedona/core/joinJudgement/DedupParams.java     |   0
 .../core/joinJudgement/DuplicatesFilter.java       |   0
 .../joinJudgement/DynamicIndexLookupJudgement.java |   0
 .../sedona/core/joinJudgement/JudgementBase.java   |   0
 .../joinJudgement/LeftIndexLookupJudgement.java    |   0
 .../core/joinJudgement/NestedLoopJudgement.java    |   0
 .../joinJudgement/RightIndexLookupJudgement.java   |   0
 .../knnJudgement/GeometryDistanceComparator.java   |   0
 .../sedona/core/knnJudgement/KnnJudgement.java     |   0
 .../core/knnJudgement/KnnJudgementUsingIndex.java  |   0
 .../sedona/core/rangeJudgement/JudgementBase.java  |   0
 .../sedona/core/rangeJudgement/RangeFilter.java    |   0
 .../core/rangeJudgement/RangeFilterUsingIndex.java |   0
 .../sedona/core/serde/SedonaKryoRegistrator.java   |   0
 .../showcase/EarthdataMapperRunnableExample.java   |   0
 .../org/apache/sedona/core/showcase/Example.java   |   0
 .../showcase/UserSuppliedLineStringMapper.java     |   0
 .../core/showcase/UserSuppliedPointMapper.java     |   0
 .../core/showcase/UserSuppliedPolygonMapper.java   |   0
 .../core/showcase/UserSuppliedRectangleMapper.java |   0
 .../sedona/core/spatialOperator/JoinQuery.java     |   0
 .../sedona/core/spatialOperator/KNNQuery.java      |   0
 .../sedona/core/spatialOperator/RangeQuery.java    |   0
 .../core/spatialOperator/SpatialPredicate.java     |   0
 .../SpatialPredicateEvaluators.java                |   0
 .../spatialPartitioning/EqualPartitioning.java     |   0
 .../spatialPartitioning/FlatGridPartitioner.java   |   0
 .../spatialPartitioning/HilbertPartitioning.java   |   0
 .../sedona/core/spatialPartitioning/KDB.java       |   0
 .../spatialPartitioning/KDBTreePartitioner.java    |   0
 .../spatialPartitioning/PartitioningUtils.java     |   0
 .../spatialPartitioning/QuadTreePartitioner.java   |   0
 .../spatialPartitioning/QuadtreePartitioning.java  |   0
 .../spatialPartitioning/RtreePartitioning.java     |   0
 .../spatialPartitioning/SpatialPartitioner.java    |   0
 .../spatialPartitioning/VoronoiPartitioning.java   |   0
 .../spatialPartitioning/quadtree/QuadNode.java     |   0
 .../quadtree/QuadRectangle.java                    |   0
 .../quadtree/StandardQuadTree.java                 |   0
 .../apache/sedona/core/spatialRDD/CircleRDD.java   |   0
 .../sedona/core/spatialRDD/LineStringRDD.java      |   0
 .../apache/sedona/core/spatialRDD/PointRDD.java    |   0
 .../apache/sedona/core/spatialRDD/PolygonRDD.java  |   0
 .../sedona/core/spatialRDD/RectangleRDD.java       |   0
 .../apache/sedona/core/spatialRDD/SpatialRDD.java  |   0
 .../sedona/core/spatialRddTool/IndexBuilder.java   |   0
 .../sedona/core/spatialRddTool/StatCalculator.java |   0
 .../apache/sedona/core/utils/RDDSampleUtils.java   |   0
 .../org/apache/sedona/core/utils/SedonaConf.java   |   0
 .../org/apache/sedona/core/utils/TimeUtils.java    |   0
 ...org.apache.spark.sql.sources.DataSourceRegister |   0
 .../apache/sedona/core/monitoring/Listener.scala   |   0
 .../org/apache/sedona/core/monitoring/Metric.scala |   0
 .../apache/sedona/core/monitoring/Metrics.scala    |   0
 .../ScalaEarthdataMapperRunnableExample.scala      |   4 +-
 .../apache/sedona/core/showcase/ScalaExample.scala |   3 +-
 .../python/wrapper/SerializationException.scala    |   0
 .../python/wrapper/adapters/EnvelopeAdapter.scala  |   0
 .../python/wrapper/adapters/GeomSerializer.scala   |   0
 .../python/wrapper/adapters/GeometryAdapter.scala  |   0
 .../wrapper/adapters/JoinParamsAdapter.scala       |   0
 .../python/wrapper/adapters/PythonConverter.scala  |   0
 .../adapters/PythonRddToJavaRDDAdapter.scala       |   0
 .../wrapper/adapters/RawJvmIndexRDDAdapter.scala   |   0
 .../adapters/SpatialObjectLoaderAdapter.scala      |   0
 .../wrapper/translation/CircleSerializer.scala     |   0
 .../wrapper/translation/FlatPairRddConverter.scala |   0
 .../wrapper/translation/GeometryRddConverter.scala |   0
 .../translation/GeometrySeqToPythonConverter.scala |   0
 .../wrapper/translation/GeometrySerializer.scala   |   0
 .../wrapper/translation/ListPairRddConverter.scala |   0
 .../translation/PythonGeometrySerializer.scala     |   0
 .../translation/PythonRDDToJavaConverter.scala     |   0
 .../translation/PythonRddToJavaRDDConverter.scala  |   0
 .../wrapper/translation/RDDToPythonConverter.scala |   0
 .../wrapper/utils/PythonAdapterWrapper.scala       |   0
 .../sedona/python/wrapper/utils/implicits.scala    |   0
 .../org/apache/sedona/spark/SedonaContext.scala    |   0
 .../apache/sedona/sql/SedonaSqlExtensions.scala    |   0
 .../scala/org/apache/sedona/sql/UDF/Catalog.scala  |   0
 .../org/apache/sedona/sql/UDF/UdfRegistrator.scala |   3 +-
 .../org/apache/sedona/sql/UDT/UdtRegistrator.scala |   0
 .../org/apache/sedona/sql/utils/Adapter.scala      |   4 +-
 .../sedona/sql/utils/GeometrySerializer.scala      |   0
 .../apache/sedona/sql/utils/IndexSerializer.scala  |   0
 .../apache/sedona/sql/utils/RasterSerializer.scala |   0
 .../sedona/sql/utils/SedonaSQLRegistrator.scala    |   0
 .../parquet/GeoParquetFileFormatBase.scala         |   0
 .../datasources/parquet/GeoParquetMetaData.scala   |   0
 .../parquet/GeoParquetSpatialFilter.scala          |   0
 .../spark/sql/sedona_sql/UDT/GeometryUDT.scala     |   0
 .../apache/spark/sql/sedona_sql/UDT/IndexUDT.scala |   0
 .../spark/sql/sedona_sql/UDT/RasterUDT.scala       |   0
 .../sql/sedona_sql/UDT/UdtRegistratorWrapper.scala |   0
 .../sql/sedona_sql/execution/SedonaSparkPlan.scala |   0
 .../expressions/AggregateFunctions.scala           |   0
 .../sql/sedona_sql/expressions/Constructors.scala  |   0
 .../sql/sedona_sql/expressions/DataFrameAPI.scala  |   0
 .../expressions/FoldableExpression.scala           |   0
 .../sql/sedona_sql/expressions/Functions.scala     |   0
 .../expressions/InferrableFunctionConverter.scala  |   0
 .../expressions/InferredExpression.scala           |   0
 .../sql/sedona_sql/expressions/Predicates.scala    |   0
 .../sql/sedona_sql/expressions/SerdeAware.scala    |   0
 .../expressions/collect/ST_Collect.scala           |   0
 .../sql/sedona_sql/expressions/implicits.scala     |   0
 .../expressions/raster/GeometryFunctions.scala     |   0
 .../sql/sedona_sql/expressions/raster/IO.scala     |   0
 .../sedona_sql/expressions/raster/MapAlgebra.scala |   0
 .../expressions/raster/PixelFunctionEditors.scala  |   0
 .../expressions/raster/PixelFunctions.scala        |   0
 .../expressions/raster/RasterAccessors.scala       |   0
 .../expressions/raster/RasterBandAccessors.scala   |   0
 .../expressions/raster/RasterBandEditors.scala     |   0
 .../expressions/raster/RasterConstructors.scala    |   0
 .../expressions/raster/RasterEditors.scala         |   0
 .../expressions/raster/RasterOutputs.scala         |   0
 .../expressions/raster/RasterPredicates.scala      |   0
 .../sedona_sql/expressions/raster/implicits.scala  |   0
 .../sql/sedona_sql/expressions/st_aggregates.scala |   0
 .../sedona_sql/expressions/st_constructors.scala   |   0
 .../sql/sedona_sql/expressions/st_functions.scala  |   0
 .../sql/sedona_sql/expressions/st_predicates.scala |   0
 .../sedona_sql/io/raster/RasterFileFormat.scala    |   0
 .../sql/sedona_sql/io/raster/RasterOptions.scala   |   0
 .../sedona_sql/optimization/ExpressionUtils.scala  |   0
 .../SpatialFilterPushDownForGeoParquet.scala       |   0
 .../strategy/join/BroadcastIndexJoinExec.scala     |   0
 .../strategy/join/DistanceJoinExec.scala           |   0
 .../strategy/join/JoinQueryDetector.scala          |   0
 .../sedona_sql/strategy/join/JoinedGeometry.scala  |   0
 .../strategy/join/JoinedGeometryRaster.scala       |   0
 .../sedona_sql/strategy/join/RangeJoinExec.scala   |   0
 .../strategy/join/SpatialIndexExec.scala           |   3 +-
 .../strategy/join/TraitJoinQueryBase.scala         |   0
 .../strategy/join/TraitJoinQueryExec.scala         |   2 +-
 .../spark/sql/sedona_sql/strategy/join/enums.scala |   0
 {core => spark/common}/src/test/.gitignore         |   0
 .../test/java/org/apache/sedona/core/TestBase.java |   2 +-
 .../sedona/core/formatMapper/GeoJsonIOTest.java    |   2 -
 .../TestReadInvalidSyntaxGeometriesTest.java       |   0
 .../sedona/core/formatMapper/WkbReadTest.java      |   0
 .../sedona/core/formatMapper/WktReaderTest.java    |   0
 .../shapefileParser/shapes/GeometrySerdeTest.java  |   0
 .../shapefileParser/shapes/ShapefileRDDTest.java   |   0
 .../shapes/ShapefileReaderTest.java                |   3 +-
 .../sedona/core/formatMapper/testSerNetCDF.java    |   4 -
 .../apache/sedona/core/io/EarthdataHDFTest.java    |   1 -
 .../JoinQueryCorrectnessChecker.java               |   3 +-
 .../JoinQueryDeduplicationTest.java                |   0
 .../sedona/core/spatialOperator/JoinQueryTest.java |   0
 .../sedona/core/spatialOperator/JoinTestBase.java  |   1 -
 .../core/spatialOperator/LineStringKnnTest.java    |   0
 .../core/spatialOperator/LineStringRangeTest.java  |   1 -
 .../sedona/core/spatialOperator/PointKnnTest.java  |   0
 .../core/spatialOperator/PointRangeTest.java       |   0
 .../core/spatialOperator/PolygonKnnTest.java       |   0
 .../core/spatialOperator/PolygonRangeTest.java     |   1 -
 .../core/spatialOperator/RangeQueryTest.java       |   0
 .../core/spatialOperator/RectangleKnnTest.java     |   0
 .../core/spatialOperator/RectangleRangeTest.java   |   1 -
 .../core/spatialOperator/SpatialQueryTestBase.java |   0
 .../quadtree/QuadRectangleTest.java                |   0
 .../quadtree/QuadTreePanel.java                    |   0
 .../quadtree/QuadTreePartitioningTest.java         |   0
 .../spatialPartitioning/quadtree/QuadTreeTest.java |   0
 .../quadtree/RenderQuadTree.java                   |   0
 .../core/spatialRDD/BoundaryAggregationTest.java   |   0
 .../BoundaryAndCountAggregationTest.java           |   0
 .../sedona/core/spatialRDD/GeometryOpTest.java     |   1 -
 .../sedona/core/spatialRDD/LineStringRDDTest.java  |   1 -
 .../sedona/core/spatialRDD/PointRDDTest.java       |   1 -
 .../sedona/core/spatialRDD/PolygonRDDTest.java     |   1 -
 .../sedona/core/spatialRDD/RectangleRDDTest.java   |   1 -
 .../sedona/core/spatialRDD/SpatialRDDTestBase.java |   0
 .../core/spatialRDD/SpatialRDDWriterTest.java      |   1 -
 .../sedona/core/utils/CRSTransformationTest.java   |  10 --
 .../sedona/core/utils/RDDSampleUtilsTest.java      |   0
 .../apache/sedona/core/utils/SedonaConfTest.java   |   1 -
 .../org/apache/sedona/core/utils/testGeoJSON.java  |   0
 .../org/apache/sedona/sql/adapterTestJava.java     |   2 +-
 .../common}/src/test/resources/.gitignore          |   0
 .../src/test/resources/813_buildings_test.csv      |   0
 .../common}/src/test/resources/Chicago_Crimes.csv  |   0
 .../common}/src/test/resources/arealm-small.csv    |   0
 .../common}/src/test/resources/arealm.csv          |   0
 .../test/resources/babylon.linestring.properties   |   0
 .../src/test/resources/babylon.point.properties    |   0
 .../src/test/resources/babylon.polygon.properties  |   0
 .../test/resources/babylon.rectangle.properties    |   0
 .../common}/src/test/resources/county_small.tsv    |   0
 .../src/test/resources/county_small_wkb.tsv        |   0
 .../common}/src/test/resources/crs-test-point.csv  |   0
 .../src/test/resources/crs-test-polygon.csv        |   0
 .../common}/src/test/resources/crs.test.properties |   0
 .../equalitycheckfiles/testequals_envelope1.csv    |   0
 .../testequals_envelope1_random.csv                |   0
 .../equalitycheckfiles/testequals_envelope2.csv    |   0
 .../testequals_envelope2_random.csv                |   0
 .../equalitycheckfiles/testequals_point1.csv       |   0
 .../equalitycheckfiles/testequals_point2.csv       |   0
 .../geoparquet/example-1.0.0-beta.1.parquet        | Bin
 .../src/test/resources/geoparquet/example1.parquet | Bin
 .../src/test/resources/geoparquet/example2.parquet | Bin
 .../src/test/resources/geoparquet/example3.parquet | Bin
 .../src/test/resources/geoparquet/plain.parquet    | Bin
 .../resources/invalidSyntaxGeometriesJson.json     |   0
 .../src/test/resources/linestring.test.properties  |   0
 .../common}/src/test/resources/log4j2.properties   |   0
 .../src/test/resources/point.test.properties       |   0
 .../common}/src/test/resources/points.csv          |   0
 .../common}/src/test/resources/points.json         |   0
 .../src/test/resources/polygon.test.properties     |   0
 .../src/test/resources/primaryroads-linestring.csv |   0
 .../src/test/resources/primaryroads-polygon.csv    |   0
 .../common}/src/test/resources/primaryroads.csv    |   0
 .../common}/src/test/resources/python/sampleLines  |   0
 .../common}/src/test/resources/python/samplePoints |   0
 .../src/test/resources/python/samplePolygons       |   0
 .../src/test/resources/python/simplePolygons       |   0
 .../raster/raster_with_no_data/test5.tiff          | Bin
 .../common}/src/test/resources/raster/test1.tiff   | Bin
 .../common}/src/test/resources/raster/test2.tiff   | Bin
 .../common}/src/test/resources/raster/test3.tif    | Bin
 .../src/test/resources/raster_asc/test1.asc        |   0
 .../raster_geotiff_color/FAA_UTM18N_NAD83.tif      | Bin
 .../src/test/resources/rectangle.test.properties   |   0
 .../src/test/resources/shapefiles/dbf/map.dbf      | Bin
 .../src/test/resources/shapefiles/dbf/map.shp      | Bin
 .../src/test/resources/shapefiles/dbf/map.shx      | Bin
 .../gis_osm_pois_free_1/gis_osm_pois_free_1.cpg    |   0
 .../gis_osm_pois_free_1/gis_osm_pois_free_1.dbf    | Bin
 .../gis_osm_pois_free_1/gis_osm_pois_free_1.prj    |   0
 .../gis_osm_pois_free_1/gis_osm_pois_free_1.shp    | Bin
 .../gis_osm_pois_free_1/gis_osm_pois_free_1.shx    | Bin
 .../src/test/resources/shapefiles/missing/map.dbf  | Bin
 .../src/test/resources/shapefiles/missing/map.shp  | Bin
 .../src/test/resources/shapefiles/missing/map.shx  | Bin
 .../shapefiles/multipleshapefiles/map1.dbf         | Bin
 .../shapefiles/multipleshapefiles/map1.shp         | Bin
 .../shapefiles/multipleshapefiles/map1.shx         | Bin
 .../shapefiles/multipleshapefiles/map2.dbf         | Bin
 .../shapefiles/multipleshapefiles/map2.shp         | Bin
 .../shapefiles/multipleshapefiles/map2.shx         | Bin
 .../test/resources/shapefiles/multipoint/map.dbf   | Bin
 .../test/resources/shapefiles/multipoint/map.shp   | Bin
 .../test/resources/shapefiles/multipoint/map.shx   | Bin
 .../src/test/resources/shapefiles/point/map.dbf    | Bin
 .../src/test/resources/shapefiles/point/map.shp    | Bin
 .../src/test/resources/shapefiles/point/map.shx    | Bin
 .../src/test/resources/shapefiles/polygon/map.dbf  | Bin
 .../src/test/resources/shapefiles/polygon/map.shp  | Bin
 .../src/test/resources/shapefiles/polygon/map.shx  | Bin
 .../src/test/resources/shapefiles/polygon/map.xml  |   0
 .../src/test/resources/shapefiles/polygon/map1.xml |   0
 .../src/test/resources/shapefiles/polyline/map.dbf | Bin
 .../src/test/resources/shapefiles/polyline/map.shp | Bin
 .../src/test/resources/shapefiles/polyline/map.shx | Bin
 .../unsupported/UrbAdm3D_142166_Bu_Ground.dbf      | Bin
 .../unsupported/UrbAdm3D_142166_Bu_Ground.prj      |   0
 .../unsupported/UrbAdm3D_142166_Bu_Ground.shp      | Bin
 .../unsupported/UrbAdm3D_142166_Bu_Ground.shx      | Bin
 .../common}/src/test/resources/small/areas.csv     |   0
 .../common}/src/test/resources/small/onepoint.csv  |   0
 .../common}/src/test/resources/small/points.csv    |   0
 .../test/resources/spatial-join-query-window.tsv   |   0
 .../resources/spatial-predicates-test-data.tsv     |   0
 ...2218-4c80-a179-77f67180b08c-c000.snappy.parquet | Bin
 .../subdivide/subdivide_expected_result.txt        |   0
 .../subdivide/subdivide_input_geometries.txt       |   0
 .../common}/src/test/resources/testContainsId.json |   0
 .../src/test/resources/testInvalidPolygon.json     |   0
 .../common}/src/test/resources/testPolygon.json    |   0
 .../test/resources/test_intersection_aggregate.tsv |   0
 ...test_intersection_aggregate_no_intersection.tsv |   0
 .../common}/src/test/resources/testenvelope.csv    |   0
 .../src/test/resources/testenvelope_overlap.csv    |   0
 .../common}/src/test/resources/testpoint.csv       |   0
 .../test/resources/testpolygon-no-property.json    |   0
 .../testpolygon-with-null-property-value.json      |   0
 .../common}/src/test/resources/testunion.csv       |   0
 .../common}/src/test/resources/zcta510-small.csv   |   0
 .../common}/src/test/resources/zcta510.csv         |   0
 .../sedona/core/monitoring/MetricSuite.scala       |   7 +-
 .../scala/org/apache/sedona/core/scalaTest.scala   |  35 +++--
 .../python/wrapper/TestToPythonSerialization.scala |   0
 .../sedona/sql/BroadcastIndexJoinSuite.scala       |   0
 .../org/apache/sedona/sql/DeduplicationSuite.scala |   0
 .../org/apache/sedona/sql/GeometrySample.scala     |   0
 .../apache/sedona/sql/GeometryUdtTestScala.scala   |   0
 .../org/apache/sedona/sql/RasterJoinSuite.scala    |   0
 .../org/apache/sedona/sql/SpatialJoinSuite.scala   |   0
 .../sedona/sql/SphereDistanceJoinSuite.scala       |   0
 .../org/apache/sedona/sql/TestBaseScala.scala      |   4 +-
 .../org/apache/sedona/sql/adapterTestScala.scala   |   0
 .../sedona/sql/aggregateFunctionTestScala.scala    |   0
 .../apache/sedona/sql/constructorTestScala.scala   |   0
 .../apache/sedona/sql/dataFrameAPITestScala.scala  |   0
 .../org/apache/sedona/sql/functionTestScala.scala  |   0
 .../sedona/sql/functions/FunctionsHelper.scala     |   0
 .../apache/sedona/sql/functions/STS2CellIDs.scala  |   0
 .../sedona/sql/functions/StMakePolygonSpec.scala   |   0
 .../sql/functions/TestGeometrySimplify.scala       |   0
 .../sedona/sql/functions/TestStSubDivide.scala     |   2 +-
 .../sql/functions/collect/TestStCollect.scala      |   0
 .../sedona/sql/functions/geohash/Fixtures.scala    |   0
 .../functions/geohash/TestCalculatingGeoHash.scala |   0
 .../sql/functions/geohash/TestGeoHashDecoder.scala |   0
 .../sql/functions/geohash/TestStGeoHash.scala      |   0
 .../geohash/TestStGeometryFromGeoHash.scala        |   0
 .../scala/org/apache/sedona/sql/implicits.scala    |   0
 .../ogc/GeometryTypesAndFunctionsTestScala.scala   |   0
 .../org/apache/sedona/sql/ogc/package-info.java    |   0
 .../apache/sedona/sql/predicateJoinTestScala.scala |   0
 .../org/apache/sedona/sql/predicateTestScala.scala |   0
 .../scala/org/apache/sedona/sql/rasterIOTest.scala |   0
 .../org/apache/sedona/sql/rasteralgebraTest.scala  |   0
 .../org/apache/sedona/sql/serdeAwareTest.scala     |   0
 {sql => spark}/pom.xml                             |   2 +-
 {sql => spark}/spark-3.0/.gitignore                |   0
 {sql => spark}/spark-3.0/pom.xml                   |  11 +-
 ...org.apache.spark.sql.sources.DataSourceRegister |   0
 .../datasources/parquet/GeoDataSourceUtils.scala   |   0
 .../datasources/parquet/GeoDateTimeUtils.scala     |   0
 .../datasources/parquet/GeoParquetFileFormat.scala |   0
 .../datasources/parquet/GeoParquetFilters.scala    |   0
 .../parquet/GeoParquetReadSupport.scala            |   0
 .../parquet/GeoParquetRecordMaterializer.scala     |   0
 .../parquet/GeoParquetRowConverter.scala           |   0
 .../parquet/GeoParquetSchemaConverter.scala        |   0
 .../datasources/parquet/GeoParquetUtils.scala      |   0
 .../parquet/GeoParquetWriteSupport.scala           |   0
 .../datasources/parquet/GeoSchemaMergeUtils.scala  |   0
 .../src/test/resources/log4j2.properties           |   0
 .../sql/GeoParquetSpatialFilterPushDownSuite.scala |   0
 .../org/apache/sedona/sql/TestBaseScala.scala      |   2 +-
 .../org/apache/sedona/sql/geoparquetIOTests.scala  |   0
 {sql => spark}/spark-3.4/.gitignore                |   0
 {sql => spark}/spark-3.4/pom.xml                   |  11 +-
 ...org.apache.spark.sql.sources.DataSourceRegister |   0
 .../datasources/parquet/GeoDataSourceUtils.scala   |   0
 .../datasources/parquet/GeoParquetFileFormat.scala |   0
 .../parquet/GeoParquetReadSupport.scala            |   0
 .../parquet/GeoParquetRecordMaterializer.scala     |   0
 .../parquet/GeoParquetRowConverter.scala           |   0
 .../parquet/GeoParquetSchemaConverter.scala        |   0
 .../datasources/parquet/GeoParquetUtils.scala      |   0
 .../parquet/GeoParquetWriteSupport.scala           |   0
 .../src/test/resources/log4j2.properties           |   0
 .../sql/GeoParquetSpatialFilterPushDownSuite.scala |   0
 .../org/apache/sedona/sql/TestBaseScala.scala      |   2 +-
 .../org/apache/sedona/sql/geoparquetIOTests.scala  |   0
 sql/common/pom.xml                                 | 153 ---------------------
 sql/common/src/.gitignore                          |   1 -
 sql/common/src/main/.gitignore                     |   1 -
 sql/common/src/test/.gitignore                     |   1 -
 sql/spark-3.4/src/test/resources/log4j2.properties |  31 -----
 viz/pom.xml                                        |   7 +-
 .../org/apache/sedona/viz/showcase/Example.java    |   7 +-
 .../apache/sedona/viz/showcase/ScalaExample.scala  |  15 +-
 .../org/apache/sedona/viz/ChoroplethmapTest.java   |   1 -
 .../java/org/apache/sedona/viz/HeatmapTest.java    |   1 -
 .../sedona/viz/ParallelVisualizationTest.java      |   1 -
 .../org/apache/sedona/viz/ScatterplotTest.java     |   1 -
 .../java/org/apache/sedona/viz/VizTestBase.java    |   2 +-
 .../org/apache/sedona/viz/rdd/scalaTest.scala      |   2 +-
 .../org/apache/sedona/viz/sql/TestBaseScala.scala  |   2 +-
 426 files changed, 149 insertions(+), 446 deletions(-)

diff --git a/LICENSE b/LICENSE
index 0d7915a33..de5e3a903 100644
--- a/LICENSE
+++ b/LICENSE
@@ -219,36 +219,36 @@ python/src/pygeos/c_api.h (modified based on https://github.com/pygeos/pygeos/bl
 
 Google Buildings License [https://creativecommons.org/licenses/by/4.0/ (CC by 4.0)]
 --------------------------------------
-core/src/test/resources/813_buildings_test.csv
+spark/common/src/test/resources/813_buildings_test.csv
 
 Chicago Crimes License
 --------------------------------------
-core/src/test/resources/Chicago_Crimes.csv
+spark/common/src/test/resources/Chicago_Crimes.csv
 
 No-copyright data used in unit tests
 --------------------------------------
 
 UrbIS-Adm 3D from datastore.brussels (Creative Commons CC-0 licence, No copyright)
 ---------------
-core/src/test/resources/shapefiles/unsupported/UrbAdm3D_142166_Bu_Ground.dbf
-core/src/test/resources/shapefiles/unsupported/UrbAdm3D_142166_Bu_Ground.prj
-core/src/test/resources/shapefiles/unsupported/UrbAdm3D_142166_Bu_Ground.shp
-core/src/test/resources/shapefiles/unsupported/UrbAdm3D_142166_Bu_Ground.shx
+spark/common/src/test/resources/shapefiles/unsupported/UrbAdm3D_142166_Bu_Ground.dbf
+spark/common/src/test/resources/shapefiles/unsupported/UrbAdm3D_142166_Bu_Ground.prj
+spark/common/src/test/resources/shapefiles/unsupported/UrbAdm3D_142166_Bu_Ground.shp
+spark/common/src/test/resources/shapefiles/unsupported/UrbAdm3D_142166_Bu_Ground.shx
 
 
 TIGER/Line from United States Census Bureau
 ---------------
-core/src/test/resources/arealm-small.csv
-core/src/test/resources/arealm.csv
-core/src/test/resources/county_small.tsv
-core/src/test/resources/county_small_wkb.tsv
-core/src/test/resources/primaryroads-linestring.csv
-core/src/test/resources/primaryroads-polygon.csv
-core/src/test/resources/primaryroads.csv
-core/src/test/resources/zcta510-small.csv
-core/src/test/resources/zcta510.csv
+spark/common/src/test/resources/arealm-small.csv
+spark/common/src/test/resources/arealm.csv
+spark/common/src/test/resources/county_small.tsv
+spark/common/src/test/resources/county_small_wkb.tsv
+spark/common/src/test/resources/primaryroads-linestring.csv
+spark/common/src/test/resources/primaryroads-polygon.csv
+spark/common/src/test/resources/primaryroads.csv
+spark/common/src/test/resources/zcta510-small.csv
+spark/common/src/test/resources/zcta510.csv
 
 
 MOD11C2 v006 from NASA
 ---------------
-core/src/test/resources/raster/test5.TIFF
\ No newline at end of file
+spark/common/src/test/resources/raster/test5.TIFF
\ No newline at end of file
diff --git a/R/vignettes/articles/apache-sedona.Rmd b/R/vignettes/articles/apache-sedona.Rmd
index 350f153c3..1755c9d19 100644
--- a/R/vignettes/articles/apache-sedona.Rmd
+++ b/R/vignettes/articles/apache-sedona.Rmd
@@ -128,7 +128,7 @@ library(dplyr)
 Data loaded in R can be copied to Spark using `copy_to`. Columns containing spatial information can be converted to the geometry type in Spark DataFrames (GeometryUDT) with Spark SQL functions such as `ST_GeomFromText` or `ST_GeomFromText`, see [Vector constructors](../../../api/sql/Constructor/) and [Raster input and output](../../../api/sql/Raster-loader/).
 
 ```{r}
-data <- readr::read_csv(here::here("../core/src/test/resources/arealm.csv"), col_names = FALSE, show_col_types = FALSE)
+data <- readr::read_csv(here::here("../spark/common/src/test/resources/arealm.csv"), col_names = FALSE, show_col_types = FALSE)
 data %>% glimpse()
 
 data_tbl <- copy_to(sc, data)
@@ -142,7 +142,7 @@ data_tbl %>%
 No automatic translation of `{sf}` objects is provided, they need to be converted to text (or binary) format before copying to spark.
 
 ```{r}
-data <- sf::st_read(here::here("../core/src/test/resources/testPolygon.json"))
+data <- sf::st_read(here::here("../spark/common/src/test/resources/testPolygon.json"))
 
 data %>% glimpse()
 
@@ -166,7 +166,7 @@ data_tbl %>%
 Loading data in R and then copying it to Spark will most likely not be the optimal method to prepare data for analysis; loading data directly into Spark will often be best.`spark_read_*` functions are made for this purpose (and extend `spark_read_*` functions in `sparklyr`).
 
 ```{r}
-data_tbl <- spark_read_geojson(sc, path = here::here("../core/src/test/resources/testPolygon.json"), name = "data")
+data_tbl <- spark_read_geojson(sc, path = here::here("../spark/common/src/test/resources/testPolygon.json"), name = "data")
 
 data_tbl %>% 
   glimpse()
@@ -302,7 +302,7 @@ into a `SpatialRDD`:
 ```{r}
 pt_rdd <- sedona_read_dsv_to_typed_rdd(
   sc,
-  location = here::here("../core/src/test/resources/arealm.csv"),
+  location = here::here("../spark/common/src/test/resources/arealm.csv"),
   delimiter = ",",
   type = "point",
   first_spatial_col_index = 1,
@@ -369,12 +369,12 @@ boundary <- c(-126.790180, -64.630926, 24.863836, 50.000)
 
 pt_rdd <- sedona_read_dsv_to_typed_rdd(
   sc,
-  location = here::here("../core/src/test/resources/arealm.csv"),
+  location = here::here("../spark/common/src/test/resources/arealm.csv"),
   type = "point"
 )
 polygon_rdd <- sedona_read_dsv_to_typed_rdd(
   sc,
-  location = here::here("../core/src/test/resources/primaryroads-polygon.csv"),
+  location = here::here("../spark/common/src/test/resources/primaryroads-polygon.csv"),
   type = "polygon"
 )
 pair_rdd <- sedona_spatial_join_count_by_key(
diff --git a/R/vignettes/articles/raster.Rmd b/R/vignettes/articles/raster.Rmd
index 8c6a4394b..e3cea040c 100644
--- a/R/vignettes/articles/raster.Rmd
+++ b/R/vignettes/articles/raster.Rmd
@@ -34,7 +34,7 @@ library(apache.sedona)
 
 sc <- spark_connect(master = "local")
 
-data_tbl <- spark_read_binary(sc, dir = here::here("/../core/src/test/resources/raster/"), name = "data") 
+data_tbl <- spark_read_binary(sc, dir = here::here("/../spark/common/src/test/resources/raster/"), name = "data")
 
 raster <- 
   data_tbl %>% 
diff --git a/common/src/test/java/org/apache/sedona/common/raster/RasterTestBase.java b/common/src/test/java/org/apache/sedona/common/raster/RasterTestBase.java
index fed723bca..1c9d59540 100644
--- a/common/src/test/java/org/apache/sedona/common/raster/RasterTestBase.java
+++ b/common/src/test/java/org/apache/sedona/common/raster/RasterTestBase.java
@@ -38,7 +38,7 @@ import java.nio.charset.StandardCharsets;
 public class RasterTestBase {
     String arc = "NCOLS 2\nNROWS 2\nXLLCORNER 378922\nYLLCORNER 4072345\nCELLSIZE 30\nNODATA_VALUE 0\n0 1 2 3\n";
 
-    String resourceFolder = System.getProperty("user.dir") + "/../core/src/test/resources/";
+    String resourceFolder = System.getProperty("user.dir") + "/../spark/common/src/test/resources/";
 
     GridCoverage2D oneBandRaster;
     GridCoverage2D multiBandRaster;
diff --git a/core/.gitignore b/core/.gitignore
deleted file mode 100644
index 79869dd0d..000000000
--- a/core/.gitignore
+++ /dev/null
@@ -1,9 +0,0 @@
-/target/
-/.settings/
-/.classpath
-/.project
-/dependency-reduced-pom.xml
-/doc/
-/.idea/
-*.iml
-/latest/
diff --git a/core/src/test/scala/org/apache/sedona/core/SparkUtil.scala b/core/src/test/scala/org/apache/sedona/core/SparkUtil.scala
deleted file mode 100644
index e00bd44c2..000000000
--- a/core/src/test/scala/org/apache/sedona/core/SparkUtil.scala
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * 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
-
-import org.apache.log4j.{Level, Logger}
-import org.apache.sedona.core.monitoring.Listener
-import org.apache.sedona.core.serde.SedonaKryoRegistrator
-import org.apache.spark.serializer.KryoSerializer
-import org.apache.spark.{SparkConf, SparkContext}
-import org.scalatest.FunSuite
-
-abstract class SparkUtil extends FunSuite {
-  lazy val sc = SparkUtil.sc
-}
-
-object SparkUtil {
-  private lazy val sc = {
-    val conf = new SparkConf().setAppName("scalaTest").setMaster("local[2]")
-    conf.set("spark.serializer", classOf[KryoSerializer].getName)
-    conf.set("spark.kryo.registrator", classOf[SedonaKryoRegistrator].getName)
-
-    val sc = new SparkContext(conf)
-    sc.addSparkListener(new Listener)
-    Logger.getLogger("org").setLevel(Level.WARN)
-    Logger.getLogger("akka").setLevel(Level.WARN)
-    sc
-  }
-}
diff --git a/pom.xml b/pom.xml
index 86211314e..1d83505a8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -655,8 +655,7 @@
             </properties>
             <modules>
                 <module>common</module>
-                <module>core</module>
-                <module>sql</module>
+                <module>spark</module>
                 <module>viz</module>
                 <module>spark-shaded</module>
             </modules>
@@ -677,8 +676,7 @@
             </properties>
             <modules>
                 <module>common</module>
-                <module>core</module>
-                <module>sql</module>
+                <module>spark</module>
                 <module>viz</module>
                 <module>spark-shaded</module>
                 <module>flink</module>
diff --git a/python/tests/tools.py b/python/tests/tools.py
index 1e89f1d54..7c7335013 100644
--- a/python/tests/tools.py
+++ b/python/tests/tools.py
@@ -21,8 +21,8 @@ from shapely.geometry import Point
 
 from sedona.utils.spatial_rdd_parser import GeoData
 
-tests_path = path.abspath(path.join(__file__ ,"../../../core/src/test/"))
-tests_resource = path.abspath(path.join(__file__ ,"../../../core/src/test/resources/"))
+tests_path = path.abspath(path.join(__file__ ,"../../../spark/common/src/test/"))
+tests_resource = path.abspath(path.join(__file__ ,"../../../spark/common/src/test/resources/"))
 
 def distance_sorting_functions(geo_data: GeoData, query_point: Point):
     return geo_data.geom.distance(query_point)
diff --git a/spark-shaded/pom.xml b/spark-shaded/pom.xml
index e491295cd..0fc9fe6cf 100644
--- a/spark-shaded/pom.xml
+++ b/spark-shaded/pom.xml
@@ -51,12 +51,7 @@
         </dependency>
         <dependency>
             <groupId>org.apache.sedona</groupId>
-            <artifactId>sedona-core-${spark.compat.version}_${scala.compat.version}</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.sedona</groupId>
-            <artifactId>sedona-sql-${spark.compat.version}_${scala.compat.version}</artifactId>
+            <artifactId>sedona-spark-${spark.compat.version}_${scala.compat.version}</artifactId>
             <version>${project.version}</version>
         </dependency>
         <!-- Define this to be shaded since it is provided in other modules -->
diff --git a/sql/.gitignore b/spark/.gitignore
similarity index 100%
rename from sql/.gitignore
rename to spark/.gitignore
diff --git a/sql/common/.gitignore b/spark/common/.gitignore
similarity index 100%
rename from sql/common/.gitignore
rename to spark/common/.gitignore
diff --git a/core/pom.xml b/spark/common/pom.xml
similarity index 86%
rename from core/pom.xml
rename to spark/common/pom.xml
index 280d84315..35899e47d 100644
--- a/core/pom.xml
+++ b/spark/common/pom.xml
@@ -18,19 +18,19 @@
   -->
 
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
+	<modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.sedona</groupId>
-        <artifactId>sedona-parent</artifactId>
+        <artifactId>sedona-spark-parent-${spark.compat.version}_${scala.compat.version}</artifactId>
         <version>1.5.0-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
-    <artifactId>sedona-core-${spark.compat.version}_${scala.compat.version}</artifactId>
+	<artifactId>sedona-spark-common-${spark.compat.version}_${scala.compat.version}</artifactId>
 
-    <name>${project.groupId}:${project.artifactId}</name>
-    <description>A cluster computing system for processing large-scale spatial data: RDD API.</description>
+	<name>${project.groupId}:${project.artifactId}</name>
+	<description>A cluster computing system for processing large-scale spatial data: Common SQL API.</description>
     <url>http://sedona.apache.org/</url>
-    <packaging>jar</packaging>
+	<packaging>jar</packaging>
 
     <properties>
         <maven.deploy.skip>false</maven.deploy.skip>
@@ -48,12 +48,9 @@
                 </exclusion>
             </exclusions>
         </dependency>
-
         <dependency>
             <groupId>org.apache.spark</groupId>
             <artifactId>spark-core_${scala.compat.version}</artifactId>
-            <version>${spark.version}</version>
-            <scope>provided</scope>
             <exclusions>
                 <!-- Make sure Hadoop's guava version is used for older versions of Spark tests -->
                 <exclusion>
@@ -88,17 +85,11 @@
         <dependency>
             <groupId>org.apache.spark</groupId>
             <artifactId>spark-sql_${scala.compat.version}</artifactId>
-            <version>${spark.version}</version>
-            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.hadoop</groupId>
             <artifactId>hadoop-client</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.apache.logging.log4j</groupId>
-            <artifactId>log4j-1.2-api</artifactId>
-        </dependency>
         <dependency>
             <groupId>edu.ucar</groupId>
             <artifactId>cdm-core</artifactId>
@@ -107,6 +98,10 @@
             <groupId>commons-lang</groupId>
             <artifactId>commons-lang</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-1.2-api</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.geotools</groupId>
             <artifactId>gt-main</artifactId>
@@ -123,6 +118,18 @@
             <groupId>org.geotools</groupId>
             <artifactId>gt-shapefile</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.geotools</groupId>
+            <artifactId>gt-geotiff</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.geotools</groupId>
+            <artifactId>gt-coverage</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.geotools</groupId>
+            <artifactId>gt-arcgrid</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.locationtech.jts</groupId>
             <artifactId>jts-core</artifactId>
@@ -140,15 +147,18 @@
         <dependency>
             <groupId>org.scala-lang</groupId>
             <artifactId>scala-library</artifactId>
-            <version>${scala.version}</version>
         </dependency>
-
-        <!-- Test -->
+        <dependency>
+            <groupId>org.scala-lang.modules</groupId>
+            <artifactId>scala-collection-compat_${scala.compat.version}</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.scalatest</groupId>
             <artifactId>scalatest_${scala.compat.version}</artifactId>
-            <version>${scalatest.version}</version>
-            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-inline</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.hadoop</groupId>
@@ -170,21 +180,15 @@
                 </exclusion>
             </exclusions>
         </dependency>
-        <dependency>
-            <groupId>org.mockito</groupId>
-            <artifactId>mockito-all</artifactId>
-            <version>1.8.5</version>
-            <scope>test</scope>
-        </dependency>
     </dependencies>
-    <build>
+	<build>
         <sourceDirectory>src/main/java</sourceDirectory>
         <plugins>
             <plugin>
                 <groupId>net.alchim31.maven</groupId>
                 <artifactId>scala-maven-plugin</artifactId>
                 <executions>
-                    <execution>
+                   <execution>
                         <id>attach-javadocs</id>
                         <configuration>
                             <skip>true</skip>
@@ -201,5 +205,5 @@
                 <artifactId>scalastyle-maven-plugin</artifactId>
             </plugin>
         </plugins>
-    </build>
+	</build>
 </project>
diff --git a/core/src/.gitignore b/spark/common/src/.gitignore
similarity index 100%
rename from core/src/.gitignore
rename to spark/common/src/.gitignore
diff --git a/core/src/main/.gitignore b/spark/common/src/main/.gitignore
similarity index 100%
rename from core/src/main/.gitignore
rename to spark/common/src/main/.gitignore
diff --git a/core/src/main/java/org/apache/sedona/core/enums/GridType.java b/spark/common/src/main/java/org/apache/sedona/core/enums/GridType.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/enums/GridType.java
rename to spark/common/src/main/java/org/apache/sedona/core/enums/GridType.java
diff --git a/core/src/main/java/org/apache/sedona/core/enums/IndexType.java b/spark/common/src/main/java/org/apache/sedona/core/enums/IndexType.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/enums/IndexType.java
rename to spark/common/src/main/java/org/apache/sedona/core/enums/IndexType.java
diff --git a/core/src/main/java/org/apache/sedona/core/enums/JoinBuildSide.java b/spark/common/src/main/java/org/apache/sedona/core/enums/JoinBuildSide.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/enums/JoinBuildSide.java
rename to spark/common/src/main/java/org/apache/sedona/core/enums/JoinBuildSide.java
diff --git a/core/src/main/java/org/apache/sedona/core/enums/JoinSparitionDominantSide.java b/spark/common/src/main/java/org/apache/sedona/core/enums/JoinSparitionDominantSide.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/enums/JoinSparitionDominantSide.java
rename to spark/common/src/main/java/org/apache/sedona/core/enums/JoinSparitionDominantSide.java
diff --git a/core/src/main/java/org/apache/sedona/core/enums/SpatialJoinOptimizationMode.java b/spark/common/src/main/java/org/apache/sedona/core/enums/SpatialJoinOptimizationMode.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/enums/SpatialJoinOptimizationMode.java
rename to spark/common/src/main/java/org/apache/sedona/core/enums/SpatialJoinOptimizationMode.java
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/EarthdataHDFPointMapper.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/EarthdataHDFPointMapper.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/EarthdataHDFPointMapper.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/EarthdataHDFPointMapper.java
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/FormatMapper.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/FormatMapper.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/FormatMapper.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/FormatMapper.java
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/GeoJsonReader.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/GeoJsonReader.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/GeoJsonReader.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/GeoJsonReader.java
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/LineStringFormatMapper.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/LineStringFormatMapper.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/LineStringFormatMapper.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/LineStringFormatMapper.java
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/PointFormatMapper.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/PointFormatMapper.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/PointFormatMapper.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/PointFormatMapper.java
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/PolygonFormatMapper.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/PolygonFormatMapper.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/PolygonFormatMapper.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/PolygonFormatMapper.java
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/RddReader.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/RddReader.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/RddReader.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/RddReader.java
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/RectangleFormatMapper.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/RectangleFormatMapper.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/RectangleFormatMapper.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/RectangleFormatMapper.java
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/WkbReader.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/WkbReader.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/WkbReader.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/WkbReader.java
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/WktReader.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/WktReader.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/WktReader.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/WktReader.java
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/netcdfParser/HDFSRandomAccessFile.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/netcdfParser/HDFSRandomAccessFile.java
similarity index 84%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/netcdfParser/HDFSRandomAccessFile.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/netcdfParser/HDFSRandomAccessFile.java
index d0587520e..2dd92aa81 100644
--- a/core/src/main/java/org/apache/sedona/core/formatMapper/netcdfParser/HDFSRandomAccessFile.java
+++ b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/netcdfParser/HDFSRandomAccessFile.java
@@ -7,13 +7,14 @@
  * "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
+ *   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.
+ * 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.
  */
 
 /*
@@ -46,7 +47,7 @@ public class HDFSRandomAccessFile
     public HDFSRandomAccessFile(String fileSystemURI, String location)
             throws IOException
     {
-        this(fileSystemURI, location, defaultBufferSize);
+        this(fileSystemURI, location, RandomAccessFile.defaultBufferSize);
     }
 
     public HDFSRandomAccessFile(String fileSystemURI, String location, int bufferSize)
@@ -56,8 +57,8 @@ public class HDFSRandomAccessFile
         fsURI = URI.create(fileSystemURI);
         filePath = new Path(location);
         this.location = location;
-        if (debugLeaks) {
-            openFiles.add(location);
+        if (RandomAccessFile.debugLeaks) {
+            RandomAccessFile.openFiles.add(location);
         }
 
         FileSystem fs = FileSystem.get(fsURI, new Configuration());
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/netcdfParser/SerNetCDFUtils.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/netcdfParser/SerNetCDFUtils.java
similarity index 94%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/netcdfParser/SerNetCDFUtils.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/netcdfParser/SerNetCDFUtils.java
index 91587f902..e5118ca73 100644
--- a/core/src/main/java/org/apache/sedona/core/formatMapper/netcdfParser/SerNetCDFUtils.java
+++ b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/netcdfParser/SerNetCDFUtils.java
@@ -7,13 +7,14 @@
  * "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
+ *   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.
+ * 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.
  */
 /*
  * The following content is a Java rewrite version of SciSpark NetCDFUtils.scala which is under Apache License.
@@ -31,6 +32,7 @@
 package org.apache.sedona.core.formatMapper.netcdfParser;
 
 import ucar.ma2.Array;
+import ucar.ma2.DataType;
 import ucar.ma2.Index;
 import ucar.nc2.Dimension;
 import ucar.nc2.NetcdfFile;
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/ShapefileRDD.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/ShapefileRDD.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/ShapefileRDD.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/ShapefileRDD.java
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/ShapefileReader.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/ShapefileReader.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/ShapefileReader.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/ShapefileReader.java
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/boundary/BoundBox.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/boundary/BoundBox.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/boundary/BoundBox.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/boundary/BoundBox.java
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/boundary/BoundaryInputFormat.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/boundary/BoundaryInputFormat.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/boundary/BoundaryInputFormat.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/boundary/BoundaryInputFormat.java
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/boundary/BoundaryRecordReader.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/boundary/BoundaryRecordReader.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/boundary/BoundaryRecordReader.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/boundary/BoundaryRecordReader.java
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/fieldname/FieldnameInputFormat.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/fieldname/FieldnameInputFormat.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/fieldname/FieldnameInputFormat.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/fieldname/FieldnameInputFormat.java
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/fieldname/FieldnameRecordReader.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/fieldname/FieldnameRecordReader.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/fieldname/FieldnameRecordReader.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/fieldname/FieldnameRecordReader.java
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/dbf/DbfParseUtil.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/dbf/DbfParseUtil.java
similarity index 96%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/dbf/DbfParseUtil.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/dbf/DbfParseUtil.java
index 6c5e076e9..09c548ee1 100644
--- a/core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/dbf/DbfParseUtil.java
+++ b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/dbf/DbfParseUtil.java
@@ -127,10 +127,10 @@ public class DbfParseUtil
         // parse n filed descriptors
         fieldDescriptors = new ArrayList<>();
         byte terminator = inputStream.readByte();
-        while (terminator != FIELD_DESCRIPTOR_TERMINATOR) {
+        while (terminator != ShapeFileConst.FIELD_DESCRIPTOR_TERMINATOR) {
             FieldDescriptor descriptor = new FieldDescriptor();
             //read field name
-            byte[] nameBytes = new byte[FIELD_NAME_LENGTH];
+            byte[] nameBytes = new byte[ShapeFileConst.FIELD_NAME_LENGTH];
             nameBytes[0] = terminator;
             inputStream.readFully(nameBytes, 1, 10);
             int zeroId = 0;
@@ -166,12 +166,12 @@ public class DbfParseUtil
         if (isDone()) { return null; }
         byte flag = inputStream.readByte();
         final int recordLength = numBytesRecord - 1;//exclude skip the record flag when read and skip
-        while (flag == RECORD_DELETE_FLAG) {
+        while (flag == ShapeFileConst.RECORD_DELETE_FLAG) {
             inputStream.skipBytes(recordLength);
             numRecordRead++;
             flag = inputStream.readByte();
         }
-        if (flag == FILE_END_FLAG) { return null; }
+        if (flag == ShapeFileConst.FILE_END_FLAG) { return null; }
         byte[] primitiveBytes = new byte[recordLength];
         inputStream.readFully(primitiveBytes);
         numRecordRead++; //update number of record read
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/dbf/FieldDescriptor.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/dbf/FieldDescriptor.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/dbf/FieldDescriptor.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/dbf/FieldDescriptor.java
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/MultiPointParser.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/MultiPointParser.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/MultiPointParser.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/MultiPointParser.java
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/PointParser.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/PointParser.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/PointParser.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/PointParser.java
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/PolyLineParser.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/PolyLineParser.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/PolyLineParser.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/PolyLineParser.java
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/PolygonParser.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/PolygonParser.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/PolygonParser.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/PolygonParser.java
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/ShapeFileConst.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/ShapeFileConst.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/ShapeFileConst.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/ShapeFileConst.java
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/ShapeParser.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/ShapeParser.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/ShapeParser.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/ShapeParser.java
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/ShapeReader.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/ShapeReader.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/ShapeReader.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/ShapeReader.java
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/ShapeReaderFactory.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/ShapeReaderFactory.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/ShapeReaderFactory.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/ShapeReaderFactory.java
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/ShapeSerde.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/ShapeSerde.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/ShapeSerde.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/ShapeSerde.java
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/ShapeType.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/ShapeType.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/ShapeType.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/ShapeType.java
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/ShpFileParser.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/ShpFileParser.java
similarity index 89%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/ShpFileParser.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/ShpFileParser.java
index 705262f50..88cb0b290 100644
--- a/core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/ShpFileParser.java
+++ b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/ShpFileParser.java
@@ -62,14 +62,14 @@ public class ShpFileParser
     public void parseShapeFileHead()
             throws IOException
     {
-        reader.skip(INT_LENGTH);
-        reader.skip(HEAD_EMPTY_NUM * INT_LENGTH);
-        fileLength = 2 * ((long) reader.readInt() - HEAD_FILE_LENGTH_16BIT);
+        reader.skip(ShapeFileConst.INT_LENGTH);
+        reader.skip(ShapeFileConst.HEAD_EMPTY_NUM * ShapeFileConst.INT_LENGTH);
+        fileLength = 2 * ((long) reader.readInt() - ShapeFileConst.HEAD_FILE_LENGTH_16BIT);
         remainLength = fileLength;
         // Skip 2 integers: file version and token type
-        reader.skip(2 * INT_LENGTH);
+        reader.skip(2 * ShapeFileConst.INT_LENGTH);
         // if bound box is not referenced, skip it
-        reader.skip(HEAD_BOX_NUM * DOUBLE_LENGTH);
+        reader.skip(ShapeFileConst.HEAD_BOX_NUM * ShapeFileConst.DOUBLE_LENGTH);
     }
 
     /**
@@ -86,7 +86,7 @@ public class ShpFileParser
         long recordLength = 2 * (contentLength + 4);
         remainLength -= recordLength;
         int typeID = EndianUtils.swapInteger(reader.readInt());
-        byte[] contentArray = new byte[contentLength * 2 - INT_LENGTH];// exclude the 4 bytes we read for shape type
+        byte[] contentArray = new byte[contentLength * 2 - ShapeFileConst.INT_LENGTH];// exclude the 4 bytes we read for shape type
         reader.read(contentArray, 0, contentArray.length);
         return new ShpRecord(contentArray, typeID);
     }
@@ -148,7 +148,7 @@ public class ShpFileParser
         public int readInt()
                 throws IOException
         {
-            byte[] bytes = new byte[INT_LENGTH];
+            byte[] bytes = new byte[ShapeFileConst.INT_LENGTH];
             input.readFully(bytes);
             return ByteBuffer.wrap(bytes).getInt();
         }
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/TypeUnknownException.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/TypeUnknownException.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/TypeUnknownException.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/parseUtils/shp/TypeUnknownException.java
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/CombineShapeReader.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/CombineShapeReader.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/CombineShapeReader.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/CombineShapeReader.java
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/DbfFileReader.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/DbfFileReader.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/DbfFileReader.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/DbfFileReader.java
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/PrimitiveShape.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/PrimitiveShape.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/PrimitiveShape.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/PrimitiveShape.java
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/ShapeFileReader.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/ShapeFileReader.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/ShapeFileReader.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/ShapeFileReader.java
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/ShapeInputFormat.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/ShapeInputFormat.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/ShapeInputFormat.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/ShapeInputFormat.java
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/ShapeKey.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/ShapeKey.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/ShapeKey.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/ShapeKey.java
diff --git a/core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/ShpRecord.java b/spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/ShpRecord.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/ShpRecord.java
rename to spark/common/src/main/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/ShpRecord.java
diff --git a/core/src/main/java/org/apache/sedona/core/joinJudgement/DedupParams.java b/spark/common/src/main/java/org/apache/sedona/core/joinJudgement/DedupParams.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/joinJudgement/DedupParams.java
rename to spark/common/src/main/java/org/apache/sedona/core/joinJudgement/DedupParams.java
diff --git a/core/src/main/java/org/apache/sedona/core/joinJudgement/DuplicatesFilter.java b/spark/common/src/main/java/org/apache/sedona/core/joinJudgement/DuplicatesFilter.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/joinJudgement/DuplicatesFilter.java
rename to spark/common/src/main/java/org/apache/sedona/core/joinJudgement/DuplicatesFilter.java
diff --git a/core/src/main/java/org/apache/sedona/core/joinJudgement/DynamicIndexLookupJudgement.java b/spark/common/src/main/java/org/apache/sedona/core/joinJudgement/DynamicIndexLookupJudgement.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/joinJudgement/DynamicIndexLookupJudgement.java
rename to spark/common/src/main/java/org/apache/sedona/core/joinJudgement/DynamicIndexLookupJudgement.java
diff --git a/core/src/main/java/org/apache/sedona/core/joinJudgement/JudgementBase.java b/spark/common/src/main/java/org/apache/sedona/core/joinJudgement/JudgementBase.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/joinJudgement/JudgementBase.java
rename to spark/common/src/main/java/org/apache/sedona/core/joinJudgement/JudgementBase.java
diff --git a/core/src/main/java/org/apache/sedona/core/joinJudgement/LeftIndexLookupJudgement.java b/spark/common/src/main/java/org/apache/sedona/core/joinJudgement/LeftIndexLookupJudgement.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/joinJudgement/LeftIndexLookupJudgement.java
rename to spark/common/src/main/java/org/apache/sedona/core/joinJudgement/LeftIndexLookupJudgement.java
diff --git a/core/src/main/java/org/apache/sedona/core/joinJudgement/NestedLoopJudgement.java b/spark/common/src/main/java/org/apache/sedona/core/joinJudgement/NestedLoopJudgement.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/joinJudgement/NestedLoopJudgement.java
rename to spark/common/src/main/java/org/apache/sedona/core/joinJudgement/NestedLoopJudgement.java
diff --git a/core/src/main/java/org/apache/sedona/core/joinJudgement/RightIndexLookupJudgement.java b/spark/common/src/main/java/org/apache/sedona/core/joinJudgement/RightIndexLookupJudgement.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/joinJudgement/RightIndexLookupJudgement.java
rename to spark/common/src/main/java/org/apache/sedona/core/joinJudgement/RightIndexLookupJudgement.java
diff --git a/core/src/main/java/org/apache/sedona/core/knnJudgement/GeometryDistanceComparator.java b/spark/common/src/main/java/org/apache/sedona/core/knnJudgement/GeometryDistanceComparator.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/knnJudgement/GeometryDistanceComparator.java
rename to spark/common/src/main/java/org/apache/sedona/core/knnJudgement/GeometryDistanceComparator.java
diff --git a/core/src/main/java/org/apache/sedona/core/knnJudgement/KnnJudgement.java b/spark/common/src/main/java/org/apache/sedona/core/knnJudgement/KnnJudgement.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/knnJudgement/KnnJudgement.java
rename to spark/common/src/main/java/org/apache/sedona/core/knnJudgement/KnnJudgement.java
diff --git a/core/src/main/java/org/apache/sedona/core/knnJudgement/KnnJudgementUsingIndex.java b/spark/common/src/main/java/org/apache/sedona/core/knnJudgement/KnnJudgementUsingIndex.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/knnJudgement/KnnJudgementUsingIndex.java
rename to spark/common/src/main/java/org/apache/sedona/core/knnJudgement/KnnJudgementUsingIndex.java
diff --git a/core/src/main/java/org/apache/sedona/core/rangeJudgement/JudgementBase.java b/spark/common/src/main/java/org/apache/sedona/core/rangeJudgement/JudgementBase.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/rangeJudgement/JudgementBase.java
rename to spark/common/src/main/java/org/apache/sedona/core/rangeJudgement/JudgementBase.java
diff --git a/core/src/main/java/org/apache/sedona/core/rangeJudgement/RangeFilter.java b/spark/common/src/main/java/org/apache/sedona/core/rangeJudgement/RangeFilter.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/rangeJudgement/RangeFilter.java
rename to spark/common/src/main/java/org/apache/sedona/core/rangeJudgement/RangeFilter.java
diff --git a/core/src/main/java/org/apache/sedona/core/rangeJudgement/RangeFilterUsingIndex.java b/spark/common/src/main/java/org/apache/sedona/core/rangeJudgement/RangeFilterUsingIndex.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/rangeJudgement/RangeFilterUsingIndex.java
rename to spark/common/src/main/java/org/apache/sedona/core/rangeJudgement/RangeFilterUsingIndex.java
diff --git a/core/src/main/java/org/apache/sedona/core/serde/SedonaKryoRegistrator.java b/spark/common/src/main/java/org/apache/sedona/core/serde/SedonaKryoRegistrator.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/serde/SedonaKryoRegistrator.java
rename to spark/common/src/main/java/org/apache/sedona/core/serde/SedonaKryoRegistrator.java
diff --git a/core/src/main/java/org/apache/sedona/core/showcase/EarthdataMapperRunnableExample.java b/spark/common/src/main/java/org/apache/sedona/core/showcase/EarthdataMapperRunnableExample.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/showcase/EarthdataMapperRunnableExample.java
rename to spark/common/src/main/java/org/apache/sedona/core/showcase/EarthdataMapperRunnableExample.java
diff --git a/core/src/main/java/org/apache/sedona/core/showcase/Example.java b/spark/common/src/main/java/org/apache/sedona/core/showcase/Example.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/showcase/Example.java
rename to spark/common/src/main/java/org/apache/sedona/core/showcase/Example.java
diff --git a/core/src/main/java/org/apache/sedona/core/showcase/UserSuppliedLineStringMapper.java b/spark/common/src/main/java/org/apache/sedona/core/showcase/UserSuppliedLineStringMapper.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/showcase/UserSuppliedLineStringMapper.java
rename to spark/common/src/main/java/org/apache/sedona/core/showcase/UserSuppliedLineStringMapper.java
diff --git a/core/src/main/java/org/apache/sedona/core/showcase/UserSuppliedPointMapper.java b/spark/common/src/main/java/org/apache/sedona/core/showcase/UserSuppliedPointMapper.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/showcase/UserSuppliedPointMapper.java
rename to spark/common/src/main/java/org/apache/sedona/core/showcase/UserSuppliedPointMapper.java
diff --git a/core/src/main/java/org/apache/sedona/core/showcase/UserSuppliedPolygonMapper.java b/spark/common/src/main/java/org/apache/sedona/core/showcase/UserSuppliedPolygonMapper.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/showcase/UserSuppliedPolygonMapper.java
rename to spark/common/src/main/java/org/apache/sedona/core/showcase/UserSuppliedPolygonMapper.java
diff --git a/core/src/main/java/org/apache/sedona/core/showcase/UserSuppliedRectangleMapper.java b/spark/common/src/main/java/org/apache/sedona/core/showcase/UserSuppliedRectangleMapper.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/showcase/UserSuppliedRectangleMapper.java
rename to spark/common/src/main/java/org/apache/sedona/core/showcase/UserSuppliedRectangleMapper.java
diff --git a/core/src/main/java/org/apache/sedona/core/spatialOperator/JoinQuery.java b/spark/common/src/main/java/org/apache/sedona/core/spatialOperator/JoinQuery.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/spatialOperator/JoinQuery.java
rename to spark/common/src/main/java/org/apache/sedona/core/spatialOperator/JoinQuery.java
diff --git a/core/src/main/java/org/apache/sedona/core/spatialOperator/KNNQuery.java b/spark/common/src/main/java/org/apache/sedona/core/spatialOperator/KNNQuery.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/spatialOperator/KNNQuery.java
rename to spark/common/src/main/java/org/apache/sedona/core/spatialOperator/KNNQuery.java
diff --git a/core/src/main/java/org/apache/sedona/core/spatialOperator/RangeQuery.java b/spark/common/src/main/java/org/apache/sedona/core/spatialOperator/RangeQuery.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/spatialOperator/RangeQuery.java
rename to spark/common/src/main/java/org/apache/sedona/core/spatialOperator/RangeQuery.java
diff --git a/core/src/main/java/org/apache/sedona/core/spatialOperator/SpatialPredicate.java b/spark/common/src/main/java/org/apache/sedona/core/spatialOperator/SpatialPredicate.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/spatialOperator/SpatialPredicate.java
rename to spark/common/src/main/java/org/apache/sedona/core/spatialOperator/SpatialPredicate.java
diff --git a/core/src/main/java/org/apache/sedona/core/spatialOperator/SpatialPredicateEvaluators.java b/spark/common/src/main/java/org/apache/sedona/core/spatialOperator/SpatialPredicateEvaluators.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/spatialOperator/SpatialPredicateEvaluators.java
rename to spark/common/src/main/java/org/apache/sedona/core/spatialOperator/SpatialPredicateEvaluators.java
diff --git a/core/src/main/java/org/apache/sedona/core/spatialPartitioning/EqualPartitioning.java b/spark/common/src/main/java/org/apache/sedona/core/spatialPartitioning/EqualPartitioning.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/spatialPartitioning/EqualPartitioning.java
rename to spark/common/src/main/java/org/apache/sedona/core/spatialPartitioning/EqualPartitioning.java
diff --git a/core/src/main/java/org/apache/sedona/core/spatialPartitioning/FlatGridPartitioner.java b/spark/common/src/main/java/org/apache/sedona/core/spatialPartitioning/FlatGridPartitioner.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/spatialPartitioning/FlatGridPartitioner.java
rename to spark/common/src/main/java/org/apache/sedona/core/spatialPartitioning/FlatGridPartitioner.java
diff --git a/core/src/main/java/org/apache/sedona/core/spatialPartitioning/HilbertPartitioning.java b/spark/common/src/main/java/org/apache/sedona/core/spatialPartitioning/HilbertPartitioning.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/spatialPartitioning/HilbertPartitioning.java
rename to spark/common/src/main/java/org/apache/sedona/core/spatialPartitioning/HilbertPartitioning.java
diff --git a/core/src/main/java/org/apache/sedona/core/spatialPartitioning/KDB.java b/spark/common/src/main/java/org/apache/sedona/core/spatialPartitioning/KDB.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/spatialPartitioning/KDB.java
rename to spark/common/src/main/java/org/apache/sedona/core/spatialPartitioning/KDB.java
diff --git a/core/src/main/java/org/apache/sedona/core/spatialPartitioning/KDBTreePartitioner.java b/spark/common/src/main/java/org/apache/sedona/core/spatialPartitioning/KDBTreePartitioner.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/spatialPartitioning/KDBTreePartitioner.java
rename to spark/common/src/main/java/org/apache/sedona/core/spatialPartitioning/KDBTreePartitioner.java
diff --git a/core/src/main/java/org/apache/sedona/core/spatialPartitioning/PartitioningUtils.java b/spark/common/src/main/java/org/apache/sedona/core/spatialPartitioning/PartitioningUtils.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/spatialPartitioning/PartitioningUtils.java
rename to spark/common/src/main/java/org/apache/sedona/core/spatialPartitioning/PartitioningUtils.java
diff --git a/core/src/main/java/org/apache/sedona/core/spatialPartitioning/QuadTreePartitioner.java b/spark/common/src/main/java/org/apache/sedona/core/spatialPartitioning/QuadTreePartitioner.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/spatialPartitioning/QuadTreePartitioner.java
rename to spark/common/src/main/java/org/apache/sedona/core/spatialPartitioning/QuadTreePartitioner.java
diff --git a/core/src/main/java/org/apache/sedona/core/spatialPartitioning/QuadtreePartitioning.java b/spark/common/src/main/java/org/apache/sedona/core/spatialPartitioning/QuadtreePartitioning.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/spatialPartitioning/QuadtreePartitioning.java
rename to spark/common/src/main/java/org/apache/sedona/core/spatialPartitioning/QuadtreePartitioning.java
diff --git a/core/src/main/java/org/apache/sedona/core/spatialPartitioning/RtreePartitioning.java b/spark/common/src/main/java/org/apache/sedona/core/spatialPartitioning/RtreePartitioning.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/spatialPartitioning/RtreePartitioning.java
rename to spark/common/src/main/java/org/apache/sedona/core/spatialPartitioning/RtreePartitioning.java
diff --git a/core/src/main/java/org/apache/sedona/core/spatialPartitioning/SpatialPartitioner.java b/spark/common/src/main/java/org/apache/sedona/core/spatialPartitioning/SpatialPartitioner.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/spatialPartitioning/SpatialPartitioner.java
rename to spark/common/src/main/java/org/apache/sedona/core/spatialPartitioning/SpatialPartitioner.java
diff --git a/core/src/main/java/org/apache/sedona/core/spatialPartitioning/VoronoiPartitioning.java b/spark/common/src/main/java/org/apache/sedona/core/spatialPartitioning/VoronoiPartitioning.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/spatialPartitioning/VoronoiPartitioning.java
rename to spark/common/src/main/java/org/apache/sedona/core/spatialPartitioning/VoronoiPartitioning.java
diff --git a/core/src/main/java/org/apache/sedona/core/spatialPartitioning/quadtree/QuadNode.java b/spark/common/src/main/java/org/apache/sedona/core/spatialPartitioning/quadtree/QuadNode.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/spatialPartitioning/quadtree/QuadNode.java
rename to spark/common/src/main/java/org/apache/sedona/core/spatialPartitioning/quadtree/QuadNode.java
diff --git a/core/src/main/java/org/apache/sedona/core/spatialPartitioning/quadtree/QuadRectangle.java b/spark/common/src/main/java/org/apache/sedona/core/spatialPartitioning/quadtree/QuadRectangle.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/spatialPartitioning/quadtree/QuadRectangle.java
rename to spark/common/src/main/java/org/apache/sedona/core/spatialPartitioning/quadtree/QuadRectangle.java
diff --git a/core/src/main/java/org/apache/sedona/core/spatialPartitioning/quadtree/StandardQuadTree.java b/spark/common/src/main/java/org/apache/sedona/core/spatialPartitioning/quadtree/StandardQuadTree.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/spatialPartitioning/quadtree/StandardQuadTree.java
rename to spark/common/src/main/java/org/apache/sedona/core/spatialPartitioning/quadtree/StandardQuadTree.java
diff --git a/core/src/main/java/org/apache/sedona/core/spatialRDD/CircleRDD.java b/spark/common/src/main/java/org/apache/sedona/core/spatialRDD/CircleRDD.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/spatialRDD/CircleRDD.java
rename to spark/common/src/main/java/org/apache/sedona/core/spatialRDD/CircleRDD.java
diff --git a/core/src/main/java/org/apache/sedona/core/spatialRDD/LineStringRDD.java b/spark/common/src/main/java/org/apache/sedona/core/spatialRDD/LineStringRDD.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/spatialRDD/LineStringRDD.java
rename to spark/common/src/main/java/org/apache/sedona/core/spatialRDD/LineStringRDD.java
diff --git a/core/src/main/java/org/apache/sedona/core/spatialRDD/PointRDD.java b/spark/common/src/main/java/org/apache/sedona/core/spatialRDD/PointRDD.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/spatialRDD/PointRDD.java
rename to spark/common/src/main/java/org/apache/sedona/core/spatialRDD/PointRDD.java
diff --git a/core/src/main/java/org/apache/sedona/core/spatialRDD/PolygonRDD.java b/spark/common/src/main/java/org/apache/sedona/core/spatialRDD/PolygonRDD.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/spatialRDD/PolygonRDD.java
rename to spark/common/src/main/java/org/apache/sedona/core/spatialRDD/PolygonRDD.java
diff --git a/core/src/main/java/org/apache/sedona/core/spatialRDD/RectangleRDD.java b/spark/common/src/main/java/org/apache/sedona/core/spatialRDD/RectangleRDD.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/spatialRDD/RectangleRDD.java
rename to spark/common/src/main/java/org/apache/sedona/core/spatialRDD/RectangleRDD.java
diff --git a/core/src/main/java/org/apache/sedona/core/spatialRDD/SpatialRDD.java b/spark/common/src/main/java/org/apache/sedona/core/spatialRDD/SpatialRDD.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/spatialRDD/SpatialRDD.java
rename to spark/common/src/main/java/org/apache/sedona/core/spatialRDD/SpatialRDD.java
diff --git a/core/src/main/java/org/apache/sedona/core/spatialRddTool/IndexBuilder.java b/spark/common/src/main/java/org/apache/sedona/core/spatialRddTool/IndexBuilder.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/spatialRddTool/IndexBuilder.java
rename to spark/common/src/main/java/org/apache/sedona/core/spatialRddTool/IndexBuilder.java
diff --git a/core/src/main/java/org/apache/sedona/core/spatialRddTool/StatCalculator.java b/spark/common/src/main/java/org/apache/sedona/core/spatialRddTool/StatCalculator.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/spatialRddTool/StatCalculator.java
rename to spark/common/src/main/java/org/apache/sedona/core/spatialRddTool/StatCalculator.java
diff --git a/core/src/main/java/org/apache/sedona/core/utils/RDDSampleUtils.java b/spark/common/src/main/java/org/apache/sedona/core/utils/RDDSampleUtils.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/utils/RDDSampleUtils.java
rename to spark/common/src/main/java/org/apache/sedona/core/utils/RDDSampleUtils.java
diff --git a/core/src/main/java/org/apache/sedona/core/utils/SedonaConf.java b/spark/common/src/main/java/org/apache/sedona/core/utils/SedonaConf.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/utils/SedonaConf.java
rename to spark/common/src/main/java/org/apache/sedona/core/utils/SedonaConf.java
diff --git a/core/src/main/java/org/apache/sedona/core/utils/TimeUtils.java b/spark/common/src/main/java/org/apache/sedona/core/utils/TimeUtils.java
similarity index 100%
rename from core/src/main/java/org/apache/sedona/core/utils/TimeUtils.java
rename to spark/common/src/main/java/org/apache/sedona/core/utils/TimeUtils.java
diff --git a/sql/common/src/main/resources/META-INF/services/org.apache.spark.sql.sources.DataSourceRegister b/spark/common/src/main/resources/META-INF/services/org.apache.spark.sql.sources.DataSourceRegister
similarity index 100%
rename from sql/common/src/main/resources/META-INF/services/org.apache.spark.sql.sources.DataSourceRegister
rename to spark/common/src/main/resources/META-INF/services/org.apache.spark.sql.sources.DataSourceRegister
diff --git a/core/src/main/scala/org/apache/sedona/core/monitoring/Listener.scala b/spark/common/src/main/scala/org/apache/sedona/core/monitoring/Listener.scala
similarity index 100%
rename from core/src/main/scala/org/apache/sedona/core/monitoring/Listener.scala
rename to spark/common/src/main/scala/org/apache/sedona/core/monitoring/Listener.scala
diff --git a/core/src/main/scala/org/apache/sedona/core/monitoring/Metric.scala b/spark/common/src/main/scala/org/apache/sedona/core/monitoring/Metric.scala
similarity index 100%
rename from core/src/main/scala/org/apache/sedona/core/monitoring/Metric.scala
rename to spark/common/src/main/scala/org/apache/sedona/core/monitoring/Metric.scala
diff --git a/core/src/main/scala/org/apache/sedona/core/monitoring/Metrics.scala b/spark/common/src/main/scala/org/apache/sedona/core/monitoring/Metrics.scala
similarity index 100%
rename from core/src/main/scala/org/apache/sedona/core/monitoring/Metrics.scala
rename to spark/common/src/main/scala/org/apache/sedona/core/monitoring/Metrics.scala
diff --git a/core/src/main/scala/org/apache/sedona/core/showcase/ScalaEarthdataMapperRunnableExample.scala b/spark/common/src/main/scala/org/apache/sedona/core/showcase/ScalaEarthdataMapperRunnableExample.scala
similarity index 95%
rename from core/src/main/scala/org/apache/sedona/core/showcase/ScalaEarthdataMapperRunnableExample.scala
rename to spark/common/src/main/scala/org/apache/sedona/core/showcase/ScalaEarthdataMapperRunnableExample.scala
index 4249065ca..09f6c2348 100644
--- a/core/src/main/scala/org/apache/sedona/core/showcase/ScalaEarthdataMapperRunnableExample.scala
+++ b/spark/common/src/main/scala/org/apache/sedona/core/showcase/ScalaEarthdataMapperRunnableExample.scala
@@ -23,10 +23,8 @@ import org.apache.log4j.{Level, Logger}
 import org.apache.sedona.common.enums.FileDataSplitter
 import org.apache.sedona.core.enums.IndexType
 import org.apache.sedona.core.formatMapper.EarthdataHDFPointMapper
-import org.apache.sedona.core.spatialOperator.RangeQuery
-import org.apache.sedona.core.spatialOperator.SpatialPredicate
+import org.apache.sedona.core.spatialOperator.{RangeQuery, SpatialPredicate}
 import org.apache.sedona.core.spatialRDD.PointRDD
-import org.apache.spark.storage.StorageLevel
 import org.apache.spark.{SparkConf, SparkContext}
 import org.locationtech.jts.geom.Envelope
 
diff --git a/core/src/main/scala/org/apache/sedona/core/showcase/ScalaExample.scala b/spark/common/src/main/scala/org/apache/sedona/core/showcase/ScalaExample.scala
similarity index 99%
rename from core/src/main/scala/org/apache/sedona/core/showcase/ScalaExample.scala
rename to spark/common/src/main/scala/org/apache/sedona/core/showcase/ScalaExample.scala
index 235aa0b6c..a2e96c6b7 100644
--- a/core/src/main/scala/org/apache/sedona/core/showcase/ScalaExample.scala
+++ b/spark/common/src/main/scala/org/apache/sedona/core/showcase/ScalaExample.scala
@@ -24,8 +24,7 @@ import org.apache.sedona.common.enums.FileDataSplitter
 import org.apache.sedona.core.enums.{GridType, IndexType}
 import org.apache.sedona.core.formatMapper.shapefileParser.ShapefileRDD
 import org.apache.sedona.core.serde.SedonaKryoRegistrator
-import org.apache.sedona.core.spatialOperator.SpatialPredicate
-import org.apache.sedona.core.spatialOperator.{JoinQuery, KNNQuery, RangeQuery}
+import org.apache.sedona.core.spatialOperator.{JoinQuery, KNNQuery, RangeQuery, SpatialPredicate}
 import org.apache.sedona.core.spatialRDD.{CircleRDD, PointRDD, PolygonRDD}
 import org.apache.spark.serializer.KryoSerializer
 import org.apache.spark.storage.StorageLevel
diff --git a/sql/common/src/main/scala/org/apache/sedona/python/wrapper/SerializationException.scala b/spark/common/src/main/scala/org/apache/sedona/python/wrapper/SerializationException.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/sedona/python/wrapper/SerializationException.scala
rename to spark/common/src/main/scala/org/apache/sedona/python/wrapper/SerializationException.scala
diff --git a/sql/common/src/main/scala/org/apache/sedona/python/wrapper/adapters/EnvelopeAdapter.scala b/spark/common/src/main/scala/org/apache/sedona/python/wrapper/adapters/EnvelopeAdapter.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/sedona/python/wrapper/adapters/EnvelopeAdapter.scala
rename to spark/common/src/main/scala/org/apache/sedona/python/wrapper/adapters/EnvelopeAdapter.scala
diff --git a/sql/common/src/main/scala/org/apache/sedona/python/wrapper/adapters/GeomSerializer.scala b/spark/common/src/main/scala/org/apache/sedona/python/wrapper/adapters/GeomSerializer.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/sedona/python/wrapper/adapters/GeomSerializer.scala
rename to spark/common/src/main/scala/org/apache/sedona/python/wrapper/adapters/GeomSerializer.scala
diff --git a/sql/common/src/main/scala/org/apache/sedona/python/wrapper/adapters/GeometryAdapter.scala b/spark/common/src/main/scala/org/apache/sedona/python/wrapper/adapters/GeometryAdapter.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/sedona/python/wrapper/adapters/GeometryAdapter.scala
rename to spark/common/src/main/scala/org/apache/sedona/python/wrapper/adapters/GeometryAdapter.scala
diff --git a/sql/common/src/main/scala/org/apache/sedona/python/wrapper/adapters/JoinParamsAdapter.scala b/spark/common/src/main/scala/org/apache/sedona/python/wrapper/adapters/JoinParamsAdapter.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/sedona/python/wrapper/adapters/JoinParamsAdapter.scala
rename to spark/common/src/main/scala/org/apache/sedona/python/wrapper/adapters/JoinParamsAdapter.scala
diff --git a/sql/common/src/main/scala/org/apache/sedona/python/wrapper/adapters/PythonConverter.scala b/spark/common/src/main/scala/org/apache/sedona/python/wrapper/adapters/PythonConverter.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/sedona/python/wrapper/adapters/PythonConverter.scala
rename to spark/common/src/main/scala/org/apache/sedona/python/wrapper/adapters/PythonConverter.scala
diff --git a/sql/common/src/main/scala/org/apache/sedona/python/wrapper/adapters/PythonRddToJavaRDDAdapter.scala b/spark/common/src/main/scala/org/apache/sedona/python/wrapper/adapters/PythonRddToJavaRDDAdapter.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/sedona/python/wrapper/adapters/PythonRddToJavaRDDAdapter.scala
rename to spark/common/src/main/scala/org/apache/sedona/python/wrapper/adapters/PythonRddToJavaRDDAdapter.scala
diff --git a/sql/common/src/main/scala/org/apache/sedona/python/wrapper/adapters/RawJvmIndexRDDAdapter.scala b/spark/common/src/main/scala/org/apache/sedona/python/wrapper/adapters/RawJvmIndexRDDAdapter.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/sedona/python/wrapper/adapters/RawJvmIndexRDDAdapter.scala
rename to spark/common/src/main/scala/org/apache/sedona/python/wrapper/adapters/RawJvmIndexRDDAdapter.scala
diff --git a/sql/common/src/main/scala/org/apache/sedona/python/wrapper/adapters/SpatialObjectLoaderAdapter.scala b/spark/common/src/main/scala/org/apache/sedona/python/wrapper/adapters/SpatialObjectLoaderAdapter.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/sedona/python/wrapper/adapters/SpatialObjectLoaderAdapter.scala
rename to spark/common/src/main/scala/org/apache/sedona/python/wrapper/adapters/SpatialObjectLoaderAdapter.scala
diff --git a/sql/common/src/main/scala/org/apache/sedona/python/wrapper/translation/CircleSerializer.scala b/spark/common/src/main/scala/org/apache/sedona/python/wrapper/translation/CircleSerializer.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/sedona/python/wrapper/translation/CircleSerializer.scala
rename to spark/common/src/main/scala/org/apache/sedona/python/wrapper/translation/CircleSerializer.scala
diff --git a/sql/common/src/main/scala/org/apache/sedona/python/wrapper/translation/FlatPairRddConverter.scala b/spark/common/src/main/scala/org/apache/sedona/python/wrapper/translation/FlatPairRddConverter.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/sedona/python/wrapper/translation/FlatPairRddConverter.scala
rename to spark/common/src/main/scala/org/apache/sedona/python/wrapper/translation/FlatPairRddConverter.scala
diff --git a/sql/common/src/main/scala/org/apache/sedona/python/wrapper/translation/GeometryRddConverter.scala b/spark/common/src/main/scala/org/apache/sedona/python/wrapper/translation/GeometryRddConverter.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/sedona/python/wrapper/translation/GeometryRddConverter.scala
rename to spark/common/src/main/scala/org/apache/sedona/python/wrapper/translation/GeometryRddConverter.scala
diff --git a/sql/common/src/main/scala/org/apache/sedona/python/wrapper/translation/GeometrySeqToPythonConverter.scala b/spark/common/src/main/scala/org/apache/sedona/python/wrapper/translation/GeometrySeqToPythonConverter.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/sedona/python/wrapper/translation/GeometrySeqToPythonConverter.scala
rename to spark/common/src/main/scala/org/apache/sedona/python/wrapper/translation/GeometrySeqToPythonConverter.scala
diff --git a/sql/common/src/main/scala/org/apache/sedona/python/wrapper/translation/GeometrySerializer.scala b/spark/common/src/main/scala/org/apache/sedona/python/wrapper/translation/GeometrySerializer.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/sedona/python/wrapper/translation/GeometrySerializer.scala
rename to spark/common/src/main/scala/org/apache/sedona/python/wrapper/translation/GeometrySerializer.scala
diff --git a/sql/common/src/main/scala/org/apache/sedona/python/wrapper/translation/ListPairRddConverter.scala b/spark/common/src/main/scala/org/apache/sedona/python/wrapper/translation/ListPairRddConverter.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/sedona/python/wrapper/translation/ListPairRddConverter.scala
rename to spark/common/src/main/scala/org/apache/sedona/python/wrapper/translation/ListPairRddConverter.scala
diff --git a/sql/common/src/main/scala/org/apache/sedona/python/wrapper/translation/PythonGeometrySerializer.scala b/spark/common/src/main/scala/org/apache/sedona/python/wrapper/translation/PythonGeometrySerializer.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/sedona/python/wrapper/translation/PythonGeometrySerializer.scala
rename to spark/common/src/main/scala/org/apache/sedona/python/wrapper/translation/PythonGeometrySerializer.scala
diff --git a/sql/common/src/main/scala/org/apache/sedona/python/wrapper/translation/PythonRDDToJavaConverter.scala b/spark/common/src/main/scala/org/apache/sedona/python/wrapper/translation/PythonRDDToJavaConverter.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/sedona/python/wrapper/translation/PythonRDDToJavaConverter.scala
rename to spark/common/src/main/scala/org/apache/sedona/python/wrapper/translation/PythonRDDToJavaConverter.scala
diff --git a/sql/common/src/main/scala/org/apache/sedona/python/wrapper/translation/PythonRddToJavaRDDConverter.scala b/spark/common/src/main/scala/org/apache/sedona/python/wrapper/translation/PythonRddToJavaRDDConverter.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/sedona/python/wrapper/translation/PythonRddToJavaRDDConverter.scala
rename to spark/common/src/main/scala/org/apache/sedona/python/wrapper/translation/PythonRddToJavaRDDConverter.scala
diff --git a/sql/common/src/main/scala/org/apache/sedona/python/wrapper/translation/RDDToPythonConverter.scala b/spark/common/src/main/scala/org/apache/sedona/python/wrapper/translation/RDDToPythonConverter.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/sedona/python/wrapper/translation/RDDToPythonConverter.scala
rename to spark/common/src/main/scala/org/apache/sedona/python/wrapper/translation/RDDToPythonConverter.scala
diff --git a/sql/common/src/main/scala/org/apache/sedona/python/wrapper/utils/PythonAdapterWrapper.scala b/spark/common/src/main/scala/org/apache/sedona/python/wrapper/utils/PythonAdapterWrapper.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/sedona/python/wrapper/utils/PythonAdapterWrapper.scala
rename to spark/common/src/main/scala/org/apache/sedona/python/wrapper/utils/PythonAdapterWrapper.scala
diff --git a/sql/common/src/main/scala/org/apache/sedona/python/wrapper/utils/implicits.scala b/spark/common/src/main/scala/org/apache/sedona/python/wrapper/utils/implicits.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/sedona/python/wrapper/utils/implicits.scala
rename to spark/common/src/main/scala/org/apache/sedona/python/wrapper/utils/implicits.scala
diff --git a/sql/common/src/main/scala/org/apache/sedona/spark/SedonaContext.scala b/spark/common/src/main/scala/org/apache/sedona/spark/SedonaContext.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/sedona/spark/SedonaContext.scala
rename to spark/common/src/main/scala/org/apache/sedona/spark/SedonaContext.scala
diff --git a/sql/common/src/main/scala/org/apache/sedona/sql/SedonaSqlExtensions.scala b/spark/common/src/main/scala/org/apache/sedona/sql/SedonaSqlExtensions.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/sedona/sql/SedonaSqlExtensions.scala
rename to spark/common/src/main/scala/org/apache/sedona/sql/SedonaSqlExtensions.scala
diff --git a/sql/common/src/main/scala/org/apache/sedona/sql/UDF/Catalog.scala b/spark/common/src/main/scala/org/apache/sedona/sql/UDF/Catalog.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/sedona/sql/UDF/Catalog.scala
rename to spark/common/src/main/scala/org/apache/sedona/sql/UDF/Catalog.scala
diff --git a/sql/common/src/main/scala/org/apache/sedona/sql/UDF/UdfRegistrator.scala b/spark/common/src/main/scala/org/apache/sedona/sql/UDF/UdfRegistrator.scala
similarity index 97%
rename from sql/common/src/main/scala/org/apache/sedona/sql/UDF/UdfRegistrator.scala
rename to spark/common/src/main/scala/org/apache/sedona/sql/UDF/UdfRegistrator.scala
index e568e0677..8d631430b 100644
--- a/sql/common/src/main/scala/org/apache/sedona/sql/UDF/UdfRegistrator.scala
+++ b/spark/common/src/main/scala/org/apache/sedona/sql/UDF/UdfRegistrator.scala
@@ -18,9 +18,8 @@
  */
 package org.apache.sedona.sql.UDF
 
-import org.apache.spark.sql.{SQLContext, SparkSession, functions}
 import org.apache.spark.sql.catalyst.FunctionIdentifier
-import org.apache.spark.sql.catalyst.expressions.ExpressionInfo
+import org.apache.spark.sql.{SQLContext, SparkSession, functions}
 
 object UdfRegistrator {
 
diff --git a/sql/common/src/main/scala/org/apache/sedona/sql/UDT/UdtRegistrator.scala b/spark/common/src/main/scala/org/apache/sedona/sql/UDT/UdtRegistrator.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/sedona/sql/UDT/UdtRegistrator.scala
rename to spark/common/src/main/scala/org/apache/sedona/sql/UDT/UdtRegistrator.scala
diff --git a/sql/common/src/main/scala/org/apache/sedona/sql/utils/Adapter.scala b/spark/common/src/main/scala/org/apache/sedona/sql/utils/Adapter.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/sedona/sql/utils/Adapter.scala
rename to spark/common/src/main/scala/org/apache/sedona/sql/utils/Adapter.scala
index fdeaf5da9..eb978bbab 100644
--- a/sql/common/src/main/scala/org/apache/sedona/sql/utils/Adapter.scala
+++ b/spark/common/src/main/scala/org/apache/sedona/sql/utils/Adapter.scala
@@ -18,9 +18,9 @@
  */
 package org.apache.sedona.sql.utils
 
-import java.sql.{Date, Timestamp}
-
 import org.apache.sedona.core.spatialRDD.SpatialRDD
+
+import java.sql.{Date, Timestamp}
 import org.apache.spark.api.java.JavaPairRDD
 import org.apache.spark.rdd.RDD
 import org.apache.spark.sql.sedona_sql.UDT.GeometryUDT
diff --git a/sql/common/src/main/scala/org/apache/sedona/sql/utils/GeometrySerializer.scala b/spark/common/src/main/scala/org/apache/sedona/sql/utils/GeometrySerializer.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/sedona/sql/utils/GeometrySerializer.scala
rename to spark/common/src/main/scala/org/apache/sedona/sql/utils/GeometrySerializer.scala
diff --git a/sql/common/src/main/scala/org/apache/sedona/sql/utils/IndexSerializer.scala b/spark/common/src/main/scala/org/apache/sedona/sql/utils/IndexSerializer.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/sedona/sql/utils/IndexSerializer.scala
rename to spark/common/src/main/scala/org/apache/sedona/sql/utils/IndexSerializer.scala
diff --git a/sql/common/src/main/scala/org/apache/sedona/sql/utils/RasterSerializer.scala b/spark/common/src/main/scala/org/apache/sedona/sql/utils/RasterSerializer.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/sedona/sql/utils/RasterSerializer.scala
rename to spark/common/src/main/scala/org/apache/sedona/sql/utils/RasterSerializer.scala
diff --git a/sql/common/src/main/scala/org/apache/sedona/sql/utils/SedonaSQLRegistrator.scala b/spark/common/src/main/scala/org/apache/sedona/sql/utils/SedonaSQLRegistrator.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/sedona/sql/utils/SedonaSQLRegistrator.scala
rename to spark/common/src/main/scala/org/apache/sedona/sql/utils/SedonaSQLRegistrator.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetFileFormatBase.scala b/spark/common/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetFileFormatBase.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetFileFormatBase.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetFileFormatBase.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetMetaData.scala b/spark/common/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetMetaData.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetMetaData.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetMetaData.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetSpatialFilter.scala b/spark/common/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetSpatialFilter.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetSpatialFilter.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetSpatialFilter.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/UDT/GeometryUDT.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/UDT/GeometryUDT.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/UDT/GeometryUDT.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/UDT/GeometryUDT.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/UDT/IndexUDT.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/UDT/IndexUDT.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/UDT/IndexUDT.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/UDT/IndexUDT.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/UDT/RasterUDT.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/UDT/RasterUDT.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/UDT/RasterUDT.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/UDT/RasterUDT.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/UDT/UdtRegistratorWrapper.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/UDT/UdtRegistratorWrapper.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/UDT/UdtRegistratorWrapper.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/UDT/UdtRegistratorWrapper.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/execution/SedonaSparkPlan.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/execution/SedonaSparkPlan.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/execution/SedonaSparkPlan.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/execution/SedonaSparkPlan.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/AggregateFunctions.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/AggregateFunctions.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/AggregateFunctions.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/AggregateFunctions.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/Constructors.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/Constructors.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/Constructors.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/Constructors.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/DataFrameAPI.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/DataFrameAPI.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/DataFrameAPI.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/DataFrameAPI.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/FoldableExpression.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/FoldableExpression.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/FoldableExpression.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/FoldableExpression.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/Functions.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/Functions.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/Functions.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/Functions.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/InferrableFunctionConverter.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/InferrableFunctionConverter.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/InferrableFunctionConverter.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/InferrableFunctionConverter.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/InferredExpression.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/InferredExpression.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/InferredExpression.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/InferredExpression.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/Predicates.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/Predicates.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/Predicates.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/Predicates.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/SerdeAware.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/SerdeAware.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/SerdeAware.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/SerdeAware.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/collect/ST_Collect.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/collect/ST_Collect.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/collect/ST_Collect.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/collect/ST_Collect.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/implicits.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/implicits.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/implicits.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/implicits.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/GeometryFunctions.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/GeometryFunctions.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/GeometryFunctions.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/GeometryFunctions.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/IO.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/IO.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/IO.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/IO.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/MapAlgebra.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/MapAlgebra.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/MapAlgebra.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/MapAlgebra.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/PixelFunctionEditors.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/PixelFunctionEditors.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/PixelFunctionEditors.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/PixelFunctionEditors.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/PixelFunctions.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/PixelFunctions.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/PixelFunctions.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/PixelFunctions.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/RasterAccessors.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/RasterAccessors.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/RasterAccessors.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/RasterAccessors.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/RasterBandAccessors.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/RasterBandAccessors.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/RasterBandAccessors.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/RasterBandAccessors.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/RasterBandEditors.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/RasterBandEditors.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/RasterBandEditors.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/RasterBandEditors.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/RasterConstructors.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/RasterConstructors.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/RasterConstructors.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/RasterConstructors.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/RasterEditors.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/RasterEditors.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/RasterEditors.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/RasterEditors.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/RasterOutputs.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/RasterOutputs.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/RasterOutputs.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/RasterOutputs.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/RasterPredicates.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/RasterPredicates.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/RasterPredicates.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/RasterPredicates.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/implicits.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/implicits.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/implicits.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/raster/implicits.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/st_aggregates.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/st_aggregates.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/st_aggregates.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/st_aggregates.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/st_constructors.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/st_constructors.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/st_constructors.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/st_constructors.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/st_functions.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/st_functions.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/st_functions.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/st_functions.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/st_predicates.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/st_predicates.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/st_predicates.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/st_predicates.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/io/raster/RasterFileFormat.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/io/raster/RasterFileFormat.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/io/raster/RasterFileFormat.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/io/raster/RasterFileFormat.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/io/raster/RasterOptions.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/io/raster/RasterOptions.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/io/raster/RasterOptions.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/io/raster/RasterOptions.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/optimization/ExpressionUtils.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/optimization/ExpressionUtils.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/optimization/ExpressionUtils.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/optimization/ExpressionUtils.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/optimization/SpatialFilterPushDownForGeoParquet.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/optimization/SpatialFilterPushDownForGeoParquet.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/optimization/SpatialFilterPushDownForGeoParquet.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/optimization/SpatialFilterPushDownForGeoParquet.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/BroadcastIndexJoinExec.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/BroadcastIndexJoinExec.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/BroadcastIndexJoinExec.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/BroadcastIndexJoinExec.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/DistanceJoinExec.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/DistanceJoinExec.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/DistanceJoinExec.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/DistanceJoinExec.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/JoinQueryDetector.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/JoinQueryDetector.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/JoinQueryDetector.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/JoinQueryDetector.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/JoinedGeometry.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/JoinedGeometry.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/JoinedGeometry.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/JoinedGeometry.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/JoinedGeometryRaster.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/JoinedGeometryRaster.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/JoinedGeometryRaster.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/JoinedGeometryRaster.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/RangeJoinExec.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/RangeJoinExec.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/RangeJoinExec.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/RangeJoinExec.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/SpatialIndexExec.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/SpatialIndexExec.scala
similarity index 99%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/SpatialIndexExec.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/SpatialIndexExec.scala
index b8e1a09ca..dcfe42182 100644
--- a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/SpatialIndexExec.scala
+++ b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/SpatialIndexExec.scala
@@ -18,8 +18,9 @@
  */
 package org.apache.spark.sql.sedona_sql.strategy.join
 
-import scala.jdk.CollectionConverters._
 import org.apache.sedona.core.enums.IndexType
+
+import scala.jdk.CollectionConverters._
 import org.apache.spark.broadcast.Broadcast
 import org.apache.spark.internal.Logging
 import org.apache.spark.rdd.RDD
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/TraitJoinQueryBase.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/TraitJoinQueryBase.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/TraitJoinQueryBase.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/TraitJoinQueryBase.scala
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/TraitJoinQueryExec.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/TraitJoinQueryExec.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/TraitJoinQueryExec.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/TraitJoinQueryExec.scala
index d6593df7d..6b918f551 100644
--- a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/TraitJoinQueryExec.scala
+++ b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/TraitJoinQueryExec.scala
@@ -19,8 +19,8 @@
 package org.apache.spark.sql.sedona_sql.strategy.join
 
 import org.apache.sedona.core.enums.JoinSparitionDominantSide
-import org.apache.sedona.core.spatialOperator.JoinQuery.JoinParams
 import org.apache.sedona.core.spatialOperator.{JoinQuery, SpatialPredicate}
+import org.apache.sedona.core.spatialOperator.JoinQuery.JoinParams
 import org.apache.sedona.core.utils.SedonaConf
 import org.apache.spark.rdd.RDD
 import org.apache.spark.sql.catalyst.InternalRow
diff --git a/sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/enums.scala b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/enums.scala
similarity index 100%
rename from sql/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/enums.scala
rename to spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/enums.scala
diff --git a/core/src/test/.gitignore b/spark/common/src/test/.gitignore
similarity index 100%
rename from core/src/test/.gitignore
rename to spark/common/src/test/.gitignore
diff --git a/core/src/test/java/org/apache/sedona/core/TestBase.java b/spark/common/src/test/java/org/apache/sedona/core/TestBase.java
similarity index 99%
rename from core/src/test/java/org/apache/sedona/core/TestBase.java
rename to spark/common/src/test/java/org/apache/sedona/core/TestBase.java
index 1ef1b71a9..74710da9b 100644
--- a/core/src/test/java/org/apache/sedona/core/TestBase.java
+++ b/spark/common/src/test/java/org/apache/sedona/core/TestBase.java
@@ -38,7 +38,7 @@ public class TestBase
 
     protected static void initialize(final String testSuiteName)
     {
-        conf = new SparkConf().setAppName(testSuiteName).setMaster("local[2]");
+        conf = new SparkConf().setAppName(testSuiteName).setMaster("local[*]");
         conf.set("spark.serializer", KryoSerializer.class.getName());
         conf.set("spark.kryo.registrator", SedonaKryoRegistrator.class.getName());
 
diff --git a/core/src/test/java/org/apache/sedona/core/formatMapper/GeoJsonIOTest.java b/spark/common/src/test/java/org/apache/sedona/core/formatMapper/GeoJsonIOTest.java
similarity index 99%
rename from core/src/test/java/org/apache/sedona/core/formatMapper/GeoJsonIOTest.java
rename to spark/common/src/test/java/org/apache/sedona/core/formatMapper/GeoJsonIOTest.java
index a07491a38..e140b28f3 100644
--- a/core/src/test/java/org/apache/sedona/core/formatMapper/GeoJsonIOTest.java
+++ b/spark/common/src/test/java/org/apache/sedona/core/formatMapper/GeoJsonIOTest.java
@@ -27,8 +27,6 @@ import org.junit.Test;
 import org.locationtech.jts.geom.Geometry;
 
 import java.io.IOException;
-import java.util.Arrays;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
diff --git a/core/src/test/java/org/apache/sedona/core/formatMapper/TestReadInvalidSyntaxGeometriesTest.java b/spark/common/src/test/java/org/apache/sedona/core/formatMapper/TestReadInvalidSyntaxGeometriesTest.java
similarity index 100%
rename from core/src/test/java/org/apache/sedona/core/formatMapper/TestReadInvalidSyntaxGeometriesTest.java
rename to spark/common/src/test/java/org/apache/sedona/core/formatMapper/TestReadInvalidSyntaxGeometriesTest.java
diff --git a/core/src/test/java/org/apache/sedona/core/formatMapper/WkbReadTest.java b/spark/common/src/test/java/org/apache/sedona/core/formatMapper/WkbReadTest.java
similarity index 100%
rename from core/src/test/java/org/apache/sedona/core/formatMapper/WkbReadTest.java
rename to spark/common/src/test/java/org/apache/sedona/core/formatMapper/WkbReadTest.java
diff --git a/core/src/test/java/org/apache/sedona/core/formatMapper/WktReaderTest.java b/spark/common/src/test/java/org/apache/sedona/core/formatMapper/WktReaderTest.java
similarity index 100%
rename from core/src/test/java/org/apache/sedona/core/formatMapper/WktReaderTest.java
rename to spark/common/src/test/java/org/apache/sedona/core/formatMapper/WktReaderTest.java
diff --git a/core/src/test/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/GeometrySerdeTest.java b/spark/common/src/test/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/GeometrySerdeTest.java
similarity index 100%
rename from core/src/test/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/GeometrySerdeTest.java
rename to spark/common/src/test/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/GeometrySerdeTest.java
diff --git a/core/src/test/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/ShapefileRDDTest.java b/spark/common/src/test/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/ShapefileRDDTest.java
similarity index 100%
rename from core/src/test/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/ShapefileRDDTest.java
rename to spark/common/src/test/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/ShapefileRDDTest.java
diff --git a/core/src/test/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/ShapefileReaderTest.java b/spark/common/src/test/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/ShapefileReaderTest.java
similarity index 99%
rename from core/src/test/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/ShapefileReaderTest.java
rename to spark/common/src/test/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/ShapefileReaderTest.java
index 3e2b1cef6..3ecd73857 100644
--- a/core/src/test/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/ShapefileReaderTest.java
+++ b/spark/common/src/test/java/org/apache/sedona/core/formatMapper/shapefileParser/shapes/ShapefileReaderTest.java
@@ -43,7 +43,6 @@ import org.geotools.feature.FeatureCollection;
 import org.geotools.feature.FeatureIterator;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.locationtech.jts.geom.Envelope;
 import org.locationtech.jts.geom.Geometry;
@@ -80,7 +79,7 @@ public class ShapefileReaderTest
     {
         initialize(ShapefileReaderTest.class.getName());
         // Set up HDFS minicluster
-        File baseDir = new File("./target/hdfs/shapefile").getAbsoluteFile();
+        File baseDir = new File("./target/hdfs/shapefile/").getAbsoluteFile();
         FileUtil.fullyDelete(baseDir);
         HdfsConfiguration hdfsConf = new HdfsConfiguration();
         hdfsConf.set(MiniDFSCluster.HDFS_MINIDFS_BASEDIR, baseDir.getAbsolutePath());
diff --git a/core/src/test/java/org/apache/sedona/core/formatMapper/testSerNetCDF.java b/spark/common/src/test/java/org/apache/sedona/core/formatMapper/testSerNetCDF.java
similarity index 97%
rename from core/src/test/java/org/apache/sedona/core/formatMapper/testSerNetCDF.java
rename to spark/common/src/test/java/org/apache/sedona/core/formatMapper/testSerNetCDF.java
index 1f3d56bd0..3092b37b5 100644
--- a/core/src/test/java/org/apache/sedona/core/formatMapper/testSerNetCDF.java
+++ b/spark/common/src/test/java/org/apache/sedona/core/formatMapper/testSerNetCDF.java
@@ -18,16 +18,12 @@
 
 package org.apache.sedona.core.formatMapper;
 
-import static org.junit.Assert.*;
-
 import java.util.List;
 
 import org.apache.sedona.core.formatMapper.netcdfParser.SerNetCDFUtils;
 import org.junit.After;
 import org.junit.BeforeClass;
 import org.junit.Ignore;
-import org.junit.Test;
-
 
 import ucar.ma2.Array;
 import ucar.nc2.Variable;
diff --git a/core/src/test/java/org/apache/sedona/core/io/EarthdataHDFTest.java b/spark/common/src/test/java/org/apache/sedona/core/io/EarthdataHDFTest.java
similarity index 99%
rename from core/src/test/java/org/apache/sedona/core/io/EarthdataHDFTest.java
rename to spark/common/src/test/java/org/apache/sedona/core/io/EarthdataHDFTest.java
index 1030d55a2..e9d6e6491 100644
--- a/core/src/test/java/org/apache/sedona/core/io/EarthdataHDFTest.java
+++ b/spark/common/src/test/java/org/apache/sedona/core/io/EarthdataHDFTest.java
@@ -27,7 +27,6 @@ import org.apache.sedona.core.spatialOperator.RangeQuery;
 import org.apache.sedona.core.spatialRDD.PointRDD;
 import org.apache.spark.SparkConf;
 import org.apache.spark.api.java.JavaSparkContext;
-import org.apache.spark.storage.StorageLevel;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Ignore;
diff --git a/core/src/test/java/org/apache/sedona/core/spatialOperator/JoinQueryCorrectnessChecker.java b/spark/common/src/test/java/org/apache/sedona/core/spatialOperator/JoinQueryCorrectnessChecker.java
similarity index 99%
rename from core/src/test/java/org/apache/sedona/core/spatialOperator/JoinQueryCorrectnessChecker.java
rename to spark/common/src/test/java/org/apache/sedona/core/spatialOperator/JoinQueryCorrectnessChecker.java
index 11b5fe521..676d292d9 100644
--- a/core/src/test/java/org/apache/sedona/core/spatialOperator/JoinQueryCorrectnessChecker.java
+++ b/spark/common/src/test/java/org/apache/sedona/core/spatialOperator/JoinQueryCorrectnessChecker.java
@@ -26,7 +26,6 @@ import org.apache.sedona.core.spatialRDD.LineStringRDD;
 import org.apache.sedona.core.spatialRDD.PointRDD;
 import org.apache.sedona.core.spatialRDD.PolygonRDD;
 import org.apache.sedona.core.spatialRDD.SpatialRDD;
-import org.apache.spark.storage.StorageLevel;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -118,7 +117,7 @@ public class JoinQueryCorrectnessChecker
     @BeforeClass
     public static void onceExecutedBeforeAll()
     {
-        TestBase.initialize(JoinQueryCorrectnessChecker.class.getSimpleName());
+        initialize(JoinQueryCorrectnessChecker.class.getSimpleName());
 
         // Define the user data saved in window objects and data objects
         testPolygonWindowSet = new ArrayList<>();
diff --git a/core/src/test/java/org/apache/sedona/core/spatialOperator/JoinQueryDeduplicationTest.java b/spark/common/src/test/java/org/apache/sedona/core/spatialOperator/JoinQueryDeduplicationTest.java
similarity index 100%
rename from core/src/test/java/org/apache/sedona/core/spatialOperator/JoinQueryDeduplicationTest.java
rename to spark/common/src/test/java/org/apache/sedona/core/spatialOperator/JoinQueryDeduplicationTest.java
diff --git a/core/src/test/java/org/apache/sedona/core/spatialOperator/JoinQueryTest.java b/spark/common/src/test/java/org/apache/sedona/core/spatialOperator/JoinQueryTest.java
similarity index 100%
rename from core/src/test/java/org/apache/sedona/core/spatialOperator/JoinQueryTest.java
rename to spark/common/src/test/java/org/apache/sedona/core/spatialOperator/JoinQueryTest.java
diff --git a/core/src/test/java/org/apache/sedona/core/spatialOperator/JoinTestBase.java b/spark/common/src/test/java/org/apache/sedona/core/spatialOperator/JoinTestBase.java
similarity index 99%
rename from core/src/test/java/org/apache/sedona/core/spatialOperator/JoinTestBase.java
rename to spark/common/src/test/java/org/apache/sedona/core/spatialOperator/JoinTestBase.java
index 0ee7e0c28..7cab26db2 100644
--- a/core/src/test/java/org/apache/sedona/core/spatialOperator/JoinTestBase.java
+++ b/spark/common/src/test/java/org/apache/sedona/core/spatialOperator/JoinTestBase.java
@@ -27,7 +27,6 @@ import org.apache.sedona.core.spatialRDD.PointRDD;
 import org.apache.sedona.core.spatialRDD.PolygonRDD;
 import org.apache.sedona.core.spatialRDD.RectangleRDD;
 import org.apache.sedona.core.spatialRDD.SpatialRDD;
-import org.apache.spark.storage.StorageLevel;
 import org.locationtech.jts.geom.Geometry;
 import org.locationtech.jts.geom.Polygon;
 import scala.Tuple2;
diff --git a/core/src/test/java/org/apache/sedona/core/spatialOperator/LineStringKnnTest.java b/spark/common/src/test/java/org/apache/sedona/core/spatialOperator/LineStringKnnTest.java
similarity index 100%
rename from core/src/test/java/org/apache/sedona/core/spatialOperator/LineStringKnnTest.java
rename to spark/common/src/test/java/org/apache/sedona/core/spatialOperator/LineStringKnnTest.java
diff --git a/core/src/test/java/org/apache/sedona/core/spatialOperator/LineStringRangeTest.java b/spark/common/src/test/java/org/apache/sedona/core/spatialOperator/LineStringRangeTest.java
similarity index 99%
rename from core/src/test/java/org/apache/sedona/core/spatialOperator/LineStringRangeTest.java
rename to spark/common/src/test/java/org/apache/sedona/core/spatialOperator/LineStringRangeTest.java
index 82d1df556..5ae9d5ba5 100644
--- a/core/src/test/java/org/apache/sedona/core/spatialOperator/LineStringRangeTest.java
+++ b/spark/common/src/test/java/org/apache/sedona/core/spatialOperator/LineStringRangeTest.java
@@ -27,7 +27,6 @@ import org.apache.sedona.core.spatialRDD.LineStringRDDTest;
 import org.apache.sedona.core.spatialRDD.RectangleRDDTest;
 import org.apache.spark.SparkConf;
 import org.apache.spark.api.java.JavaSparkContext;
-import org.apache.spark.storage.StorageLevel;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
diff --git a/core/src/test/java/org/apache/sedona/core/spatialOperator/PointKnnTest.java b/spark/common/src/test/java/org/apache/sedona/core/spatialOperator/PointKnnTest.java
similarity index 100%
rename from core/src/test/java/org/apache/sedona/core/spatialOperator/PointKnnTest.java
rename to spark/common/src/test/java/org/apache/sedona/core/spatialOperator/PointKnnTest.java
diff --git a/core/src/test/java/org/apache/sedona/core/spatialOperator/PointRangeTest.java b/spark/common/src/test/java/org/apache/sedona/core/spatialOperator/PointRangeTest.java
similarity index 100%
rename from core/src/test/java/org/apache/sedona/core/spatialOperator/PointRangeTest.java
rename to spark/common/src/test/java/org/apache/sedona/core/spatialOperator/PointRangeTest.java
diff --git a/core/src/test/java/org/apache/sedona/core/spatialOperator/PolygonKnnTest.java b/spark/common/src/test/java/org/apache/sedona/core/spatialOperator/PolygonKnnTest.java
similarity index 100%
rename from core/src/test/java/org/apache/sedona/core/spatialOperator/PolygonKnnTest.java
rename to spark/common/src/test/java/org/apache/sedona/core/spatialOperator/PolygonKnnTest.java
diff --git a/core/src/test/java/org/apache/sedona/core/spatialOperator/PolygonRangeTest.java b/spark/common/src/test/java/org/apache/sedona/core/spatialOperator/PolygonRangeTest.java
similarity index 99%
rename from core/src/test/java/org/apache/sedona/core/spatialOperator/PolygonRangeTest.java
rename to spark/common/src/test/java/org/apache/sedona/core/spatialOperator/PolygonRangeTest.java
index 233e8d90c..c70d7c416 100644
--- a/core/src/test/java/org/apache/sedona/core/spatialOperator/PolygonRangeTest.java
+++ b/spark/common/src/test/java/org/apache/sedona/core/spatialOperator/PolygonRangeTest.java
@@ -25,7 +25,6 @@ import org.apache.sedona.core.enums.IndexType;
 import org.apache.sedona.core.spatialRDD.PolygonRDD;
 import org.apache.spark.SparkConf;
 import org.apache.spark.api.java.JavaSparkContext;
-import org.apache.spark.storage.StorageLevel;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
diff --git a/core/src/test/java/org/apache/sedona/core/spatialOperator/RangeQueryTest.java b/spark/common/src/test/java/org/apache/sedona/core/spatialOperator/RangeQueryTest.java
similarity index 100%
rename from core/src/test/java/org/apache/sedona/core/spatialOperator/RangeQueryTest.java
rename to spark/common/src/test/java/org/apache/sedona/core/spatialOperator/RangeQueryTest.java
diff --git a/core/src/test/java/org/apache/sedona/core/spatialOperator/RectangleKnnTest.java b/spark/common/src/test/java/org/apache/sedona/core/spatialOperator/RectangleKnnTest.java
similarity index 100%
rename from core/src/test/java/org/apache/sedona/core/spatialOperator/RectangleKnnTest.java
rename to spark/common/src/test/java/org/apache/sedona/core/spatialOperator/RectangleKnnTest.java
diff --git a/core/src/test/java/org/apache/sedona/core/spatialOperator/RectangleRangeTest.java b/spark/common/src/test/java/org/apache/sedona/core/spatialOperator/RectangleRangeTest.java
similarity index 99%
rename from core/src/test/java/org/apache/sedona/core/spatialOperator/RectangleRangeTest.java
rename to spark/common/src/test/java/org/apache/sedona/core/spatialOperator/RectangleRangeTest.java
index 03e9f4e3f..bd9f874d3 100644
--- a/core/src/test/java/org/apache/sedona/core/spatialOperator/RectangleRangeTest.java
+++ b/spark/common/src/test/java/org/apache/sedona/core/spatialOperator/RectangleRangeTest.java
@@ -27,7 +27,6 @@ import org.apache.sedona.core.rangeJudgement.RangeFilterUsingIndex;
 import org.apache.sedona.core.spatialRDD.RectangleRDD;
 import org.apache.spark.SparkConf;
 import org.apache.spark.api.java.JavaSparkContext;
-import org.apache.spark.storage.StorageLevel;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
diff --git a/core/src/test/java/org/apache/sedona/core/spatialOperator/SpatialQueryTestBase.java b/spark/common/src/test/java/org/apache/sedona/core/spatialOperator/SpatialQueryTestBase.java
similarity index 100%
rename from core/src/test/java/org/apache/sedona/core/spatialOperator/SpatialQueryTestBase.java
rename to spark/common/src/test/java/org/apache/sedona/core/spatialOperator/SpatialQueryTestBase.java
diff --git a/core/src/test/java/org/apache/sedona/core/spatialPartitioning/quadtree/QuadRectangleTest.java b/spark/common/src/test/java/org/apache/sedona/core/spatialPartitioning/quadtree/QuadRectangleTest.java
similarity index 100%
rename from core/src/test/java/org/apache/sedona/core/spatialPartitioning/quadtree/QuadRectangleTest.java
rename to spark/common/src/test/java/org/apache/sedona/core/spatialPartitioning/quadtree/QuadRectangleTest.java
diff --git a/core/src/test/java/org/apache/sedona/core/spatialPartitioning/quadtree/QuadTreePanel.java b/spark/common/src/test/java/org/apache/sedona/core/spatialPartitioning/quadtree/QuadTreePanel.java
similarity index 100%
rename from core/src/test/java/org/apache/sedona/core/spatialPartitioning/quadtree/QuadTreePanel.java
rename to spark/common/src/test/java/org/apache/sedona/core/spatialPartitioning/quadtree/QuadTreePanel.java
diff --git a/core/src/test/java/org/apache/sedona/core/spatialPartitioning/quadtree/QuadTreePartitioningTest.java b/spark/common/src/test/java/org/apache/sedona/core/spatialPartitioning/quadtree/QuadTreePartitioningTest.java
similarity index 100%
rename from core/src/test/java/org/apache/sedona/core/spatialPartitioning/quadtree/QuadTreePartitioningTest.java
rename to spark/common/src/test/java/org/apache/sedona/core/spatialPartitioning/quadtree/QuadTreePartitioningTest.java
diff --git a/core/src/test/java/org/apache/sedona/core/spatialPartitioning/quadtree/QuadTreeTest.java b/spark/common/src/test/java/org/apache/sedona/core/spatialPartitioning/quadtree/QuadTreeTest.java
similarity index 100%
rename from core/src/test/java/org/apache/sedona/core/spatialPartitioning/quadtree/QuadTreeTest.java
rename to spark/common/src/test/java/org/apache/sedona/core/spatialPartitioning/quadtree/QuadTreeTest.java
diff --git a/core/src/test/java/org/apache/sedona/core/spatialPartitioning/quadtree/RenderQuadTree.java b/spark/common/src/test/java/org/apache/sedona/core/spatialPartitioning/quadtree/RenderQuadTree.java
similarity index 100%
rename from core/src/test/java/org/apache/sedona/core/spatialPartitioning/quadtree/RenderQuadTree.java
rename to spark/common/src/test/java/org/apache/sedona/core/spatialPartitioning/quadtree/RenderQuadTree.java
diff --git a/core/src/test/java/org/apache/sedona/core/spatialRDD/BoundaryAggregationTest.java b/spark/common/src/test/java/org/apache/sedona/core/spatialRDD/BoundaryAggregationTest.java
similarity index 100%
rename from core/src/test/java/org/apache/sedona/core/spatialRDD/BoundaryAggregationTest.java
rename to spark/common/src/test/java/org/apache/sedona/core/spatialRDD/BoundaryAggregationTest.java
diff --git a/core/src/test/java/org/apache/sedona/core/spatialRDD/BoundaryAndCountAggregationTest.java b/spark/common/src/test/java/org/apache/sedona/core/spatialRDD/BoundaryAndCountAggregationTest.java
similarity index 100%
rename from core/src/test/java/org/apache/sedona/core/spatialRDD/BoundaryAndCountAggregationTest.java
rename to spark/common/src/test/java/org/apache/sedona/core/spatialRDD/BoundaryAndCountAggregationTest.java
diff --git a/core/src/test/java/org/apache/sedona/core/spatialRDD/GeometryOpTest.java b/spark/common/src/test/java/org/apache/sedona/core/spatialRDD/GeometryOpTest.java
similarity index 98%
rename from core/src/test/java/org/apache/sedona/core/spatialRDD/GeometryOpTest.java
rename to spark/common/src/test/java/org/apache/sedona/core/spatialRDD/GeometryOpTest.java
index 171442470..63790bfab 100644
--- a/core/src/test/java/org/apache/sedona/core/spatialRDD/GeometryOpTest.java
+++ b/spark/common/src/test/java/org/apache/sedona/core/spatialRDD/GeometryOpTest.java
@@ -13,7 +13,6 @@
  */
 package org.apache.sedona.core.spatialRDD;
 
-import org.apache.spark.storage.StorageLevel;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
diff --git a/core/src/test/java/org/apache/sedona/core/spatialRDD/LineStringRDDTest.java b/spark/common/src/test/java/org/apache/sedona/core/spatialRDD/LineStringRDDTest.java
similarity index 99%
rename from core/src/test/java/org/apache/sedona/core/spatialRDD/LineStringRDDTest.java
rename to spark/common/src/test/java/org/apache/sedona/core/spatialRDD/LineStringRDDTest.java
index 186f18862..6572942e9 100644
--- a/core/src/test/java/org/apache/sedona/core/spatialRDD/LineStringRDDTest.java
+++ b/spark/common/src/test/java/org/apache/sedona/core/spatialRDD/LineStringRDDTest.java
@@ -19,7 +19,6 @@
 package org.apache.sedona.core.spatialRDD;
 
 import org.apache.sedona.core.enums.IndexType;
-import org.apache.spark.storage.StorageLevel;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
diff --git a/core/src/test/java/org/apache/sedona/core/spatialRDD/PointRDDTest.java b/spark/common/src/test/java/org/apache/sedona/core/spatialRDD/PointRDDTest.java
similarity index 99%
rename from core/src/test/java/org/apache/sedona/core/spatialRDD/PointRDDTest.java
rename to spark/common/src/test/java/org/apache/sedona/core/spatialRDD/PointRDDTest.java
index 651e0b880..7ec3cf728 100644
--- a/core/src/test/java/org/apache/sedona/core/spatialRDD/PointRDDTest.java
+++ b/spark/common/src/test/java/org/apache/sedona/core/spatialRDD/PointRDDTest.java
@@ -19,7 +19,6 @@
 package org.apache.sedona.core.spatialRDD;
 
 import org.apache.sedona.core.enums.IndexType;
-import org.apache.spark.storage.StorageLevel;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
diff --git a/core/src/test/java/org/apache/sedona/core/spatialRDD/PolygonRDDTest.java b/spark/common/src/test/java/org/apache/sedona/core/spatialRDD/PolygonRDDTest.java
similarity index 99%
rename from core/src/test/java/org/apache/sedona/core/spatialRDD/PolygonRDDTest.java
rename to spark/common/src/test/java/org/apache/sedona/core/spatialRDD/PolygonRDDTest.java
index e5abbd0b7..43db61912 100644
--- a/core/src/test/java/org/apache/sedona/core/spatialRDD/PolygonRDDTest.java
+++ b/spark/common/src/test/java/org/apache/sedona/core/spatialRDD/PolygonRDDTest.java
@@ -20,7 +20,6 @@ package org.apache.sedona.core.spatialRDD;
 
 import org.apache.sedona.common.enums.FileDataSplitter;
 import org.apache.sedona.core.enums.IndexType;
-import org.apache.spark.storage.StorageLevel;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
diff --git a/core/src/test/java/org/apache/sedona/core/spatialRDD/RectangleRDDTest.java b/spark/common/src/test/java/org/apache/sedona/core/spatialRDD/RectangleRDDTest.java
similarity index 98%
rename from core/src/test/java/org/apache/sedona/core/spatialRDD/RectangleRDDTest.java
rename to spark/common/src/test/java/org/apache/sedona/core/spatialRDD/RectangleRDDTest.java
index f4d5bfec1..ef6bf6247 100644
--- a/core/src/test/java/org/apache/sedona/core/spatialRDD/RectangleRDDTest.java
+++ b/spark/common/src/test/java/org/apache/sedona/core/spatialRDD/RectangleRDDTest.java
@@ -19,7 +19,6 @@
 package org.apache.sedona.core.spatialRDD;
 
 import org.apache.sedona.core.enums.IndexType;
-import org.apache.spark.storage.StorageLevel;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
diff --git a/core/src/test/java/org/apache/sedona/core/spatialRDD/SpatialRDDTestBase.java b/spark/common/src/test/java/org/apache/sedona/core/spatialRDD/SpatialRDDTestBase.java
similarity index 100%
rename from core/src/test/java/org/apache/sedona/core/spatialRDD/SpatialRDDTestBase.java
rename to spark/common/src/test/java/org/apache/sedona/core/spatialRDD/SpatialRDDTestBase.java
diff --git a/core/src/test/java/org/apache/sedona/core/spatialRDD/SpatialRDDWriterTest.java b/spark/common/src/test/java/org/apache/sedona/core/spatialRDD/SpatialRDDWriterTest.java
similarity index 99%
rename from core/src/test/java/org/apache/sedona/core/spatialRDD/SpatialRDDWriterTest.java
rename to spark/common/src/test/java/org/apache/sedona/core/spatialRDD/SpatialRDDWriterTest.java
index 680f80a93..670d54328 100644
--- a/core/src/test/java/org/apache/sedona/core/spatialRDD/SpatialRDDWriterTest.java
+++ b/spark/common/src/test/java/org/apache/sedona/core/spatialRDD/SpatialRDDWriterTest.java
@@ -23,7 +23,6 @@ import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang.NullArgumentException;
 import org.apache.sedona.common.utils.GeomUtils;
 import org.apache.sedona.common.enums.FileDataSplitter;
-import org.apache.spark.storage.StorageLevel;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
diff --git a/core/src/test/java/org/apache/sedona/core/utils/CRSTransformationTest.java b/spark/common/src/test/java/org/apache/sedona/core/utils/CRSTransformationTest.java
similarity index 93%
rename from core/src/test/java/org/apache/sedona/core/utils/CRSTransformationTest.java
rename to spark/common/src/test/java/org/apache/sedona/core/utils/CRSTransformationTest.java
index c501ebade..292c2f011 100644
--- a/core/src/test/java/org/apache/sedona/core/utils/CRSTransformationTest.java
+++ b/spark/common/src/test/java/org/apache/sedona/core/utils/CRSTransformationTest.java
@@ -23,15 +23,10 @@ import org.apache.log4j.Logger;
 import org.apache.sedona.common.enums.FileDataSplitter;
 import org.apache.sedona.core.enums.GridType;
 import org.apache.sedona.core.enums.IndexType;
-import org.apache.sedona.core.knnJudgement.GeometryDistanceComparator;
-import org.apache.sedona.core.spatialOperator.JoinQuery;
-import org.apache.sedona.core.spatialOperator.KNNQuery;
 import org.apache.sedona.core.spatialOperator.RangeQuery;
 import org.apache.sedona.core.spatialRDD.PointRDD;
-import org.apache.sedona.core.spatialRDD.PolygonRDD;
 import org.apache.spark.SparkConf;
 import org.apache.spark.api.java.JavaSparkContext;
-import org.apache.spark.storage.StorageLevel;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -39,14 +34,9 @@ import org.locationtech.jts.geom.Coordinate;
 import org.locationtech.jts.geom.Envelope;
 import org.locationtech.jts.geom.GeometryFactory;
 import org.locationtech.jts.geom.Point;
-import org.locationtech.jts.geom.Polygon;
-import scala.Tuple2;
 
 import java.io.IOException;
 import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
 import java.util.Properties;
 
 // TODO: Auto-generated Javadoc
diff --git a/core/src/test/java/org/apache/sedona/core/utils/RDDSampleUtilsTest.java b/spark/common/src/test/java/org/apache/sedona/core/utils/RDDSampleUtilsTest.java
similarity index 100%
rename from core/src/test/java/org/apache/sedona/core/utils/RDDSampleUtilsTest.java
rename to spark/common/src/test/java/org/apache/sedona/core/utils/RDDSampleUtilsTest.java
diff --git a/core/src/test/java/org/apache/sedona/core/utils/SedonaConfTest.java b/spark/common/src/test/java/org/apache/sedona/core/utils/SedonaConfTest.java
similarity index 98%
rename from core/src/test/java/org/apache/sedona/core/utils/SedonaConfTest.java
rename to spark/common/src/test/java/org/apache/sedona/core/utils/SedonaConfTest.java
index 44149296f..000a1c500 100644
--- a/core/src/test/java/org/apache/sedona/core/utils/SedonaConfTest.java
+++ b/spark/common/src/test/java/org/apache/sedona/core/utils/SedonaConfTest.java
@@ -19,7 +19,6 @@
 package org.apache.sedona.core.utils;
 
 import org.apache.spark.sql.SparkSession;
-import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
diff --git a/core/src/test/java/org/apache/sedona/core/utils/testGeoJSON.java b/spark/common/src/test/java/org/apache/sedona/core/utils/testGeoJSON.java
similarity index 100%
rename from core/src/test/java/org/apache/sedona/core/utils/testGeoJSON.java
rename to spark/common/src/test/java/org/apache/sedona/core/utils/testGeoJSON.java
diff --git a/sql/common/src/test/java/org/apache/sedona/sql/adapterTestJava.java b/spark/common/src/test/java/org/apache/sedona/sql/adapterTestJava.java
similarity index 99%
rename from sql/common/src/test/java/org/apache/sedona/sql/adapterTestJava.java
rename to spark/common/src/test/java/org/apache/sedona/sql/adapterTestJava.java
index 168360b7f..cb6d409ea 100644
--- a/sql/common/src/test/java/org/apache/sedona/sql/adapterTestJava.java
+++ b/spark/common/src/test/java/org/apache/sedona/sql/adapterTestJava.java
@@ -44,7 +44,7 @@ import java.io.Serializable;
 public class adapterTestJava
         implements Serializable
 {
-    public static String resourceFolder = System.getProperty("user.dir") + "/../core/src/test/resources/";
+    public static String resourceFolder = System.getProperty("user.dir") + "/../common/src/test/resources/";
     public static String mixedWktGeometryInputLocation = resourceFolder + "county_small.tsv";
     public static String mixedWkbGeometryInputLocation = resourceFolder + "county_small_wkb.tsv";
     public static String csvPointInputLocation = resourceFolder + "arealm.csv";
diff --git a/core/src/test/resources/.gitignore b/spark/common/src/test/resources/.gitignore
similarity index 100%
rename from core/src/test/resources/.gitignore
rename to spark/common/src/test/resources/.gitignore
diff --git a/core/src/test/resources/813_buildings_test.csv b/spark/common/src/test/resources/813_buildings_test.csv
similarity index 100%
rename from core/src/test/resources/813_buildings_test.csv
rename to spark/common/src/test/resources/813_buildings_test.csv
diff --git a/core/src/test/resources/Chicago_Crimes.csv b/spark/common/src/test/resources/Chicago_Crimes.csv
similarity index 100%
rename from core/src/test/resources/Chicago_Crimes.csv
rename to spark/common/src/test/resources/Chicago_Crimes.csv
diff --git a/core/src/test/resources/arealm-small.csv b/spark/common/src/test/resources/arealm-small.csv
similarity index 100%
rename from core/src/test/resources/arealm-small.csv
rename to spark/common/src/test/resources/arealm-small.csv
diff --git a/core/src/test/resources/arealm.csv b/spark/common/src/test/resources/arealm.csv
similarity index 100%
rename from core/src/test/resources/arealm.csv
rename to spark/common/src/test/resources/arealm.csv
diff --git a/core/src/test/resources/babylon.linestring.properties b/spark/common/src/test/resources/babylon.linestring.properties
similarity index 100%
rename from core/src/test/resources/babylon.linestring.properties
rename to spark/common/src/test/resources/babylon.linestring.properties
diff --git a/core/src/test/resources/babylon.point.properties b/spark/common/src/test/resources/babylon.point.properties
similarity index 100%
rename from core/src/test/resources/babylon.point.properties
rename to spark/common/src/test/resources/babylon.point.properties
diff --git a/core/src/test/resources/babylon.polygon.properties b/spark/common/src/test/resources/babylon.polygon.properties
similarity index 100%
rename from core/src/test/resources/babylon.polygon.properties
rename to spark/common/src/test/resources/babylon.polygon.properties
diff --git a/core/src/test/resources/babylon.rectangle.properties b/spark/common/src/test/resources/babylon.rectangle.properties
similarity index 100%
rename from core/src/test/resources/babylon.rectangle.properties
rename to spark/common/src/test/resources/babylon.rectangle.properties
diff --git a/core/src/test/resources/county_small.tsv b/spark/common/src/test/resources/county_small.tsv
similarity index 100%
rename from core/src/test/resources/county_small.tsv
rename to spark/common/src/test/resources/county_small.tsv
diff --git a/core/src/test/resources/county_small_wkb.tsv b/spark/common/src/test/resources/county_small_wkb.tsv
similarity index 100%
rename from core/src/test/resources/county_small_wkb.tsv
rename to spark/common/src/test/resources/county_small_wkb.tsv
diff --git a/core/src/test/resources/crs-test-point.csv b/spark/common/src/test/resources/crs-test-point.csv
similarity index 100%
rename from core/src/test/resources/crs-test-point.csv
rename to spark/common/src/test/resources/crs-test-point.csv
diff --git a/core/src/test/resources/crs-test-polygon.csv b/spark/common/src/test/resources/crs-test-polygon.csv
similarity index 100%
rename from core/src/test/resources/crs-test-polygon.csv
rename to spark/common/src/test/resources/crs-test-polygon.csv
diff --git a/core/src/test/resources/crs.test.properties b/spark/common/src/test/resources/crs.test.properties
similarity index 100%
rename from core/src/test/resources/crs.test.properties
rename to spark/common/src/test/resources/crs.test.properties
diff --git a/core/src/test/resources/equalitycheckfiles/testequals_envelope1.csv b/spark/common/src/test/resources/equalitycheckfiles/testequals_envelope1.csv
similarity index 100%
rename from core/src/test/resources/equalitycheckfiles/testequals_envelope1.csv
rename to spark/common/src/test/resources/equalitycheckfiles/testequals_envelope1.csv
diff --git a/core/src/test/resources/equalitycheckfiles/testequals_envelope1_random.csv b/spark/common/src/test/resources/equalitycheckfiles/testequals_envelope1_random.csv
similarity index 100%
rename from core/src/test/resources/equalitycheckfiles/testequals_envelope1_random.csv
rename to spark/common/src/test/resources/equalitycheckfiles/testequals_envelope1_random.csv
diff --git a/core/src/test/resources/equalitycheckfiles/testequals_envelope2.csv b/spark/common/src/test/resources/equalitycheckfiles/testequals_envelope2.csv
similarity index 100%
rename from core/src/test/resources/equalitycheckfiles/testequals_envelope2.csv
rename to spark/common/src/test/resources/equalitycheckfiles/testequals_envelope2.csv
diff --git a/core/src/test/resources/equalitycheckfiles/testequals_envelope2_random.csv b/spark/common/src/test/resources/equalitycheckfiles/testequals_envelope2_random.csv
similarity index 100%
rename from core/src/test/resources/equalitycheckfiles/testequals_envelope2_random.csv
rename to spark/common/src/test/resources/equalitycheckfiles/testequals_envelope2_random.csv
diff --git a/core/src/test/resources/equalitycheckfiles/testequals_point1.csv b/spark/common/src/test/resources/equalitycheckfiles/testequals_point1.csv
similarity index 100%
rename from core/src/test/resources/equalitycheckfiles/testequals_point1.csv
rename to spark/common/src/test/resources/equalitycheckfiles/testequals_point1.csv
diff --git a/core/src/test/resources/equalitycheckfiles/testequals_point2.csv b/spark/common/src/test/resources/equalitycheckfiles/testequals_point2.csv
similarity index 100%
rename from core/src/test/resources/equalitycheckfiles/testequals_point2.csv
rename to spark/common/src/test/resources/equalitycheckfiles/testequals_point2.csv
diff --git a/core/src/test/resources/geoparquet/example-1.0.0-beta.1.parquet b/spark/common/src/test/resources/geoparquet/example-1.0.0-beta.1.parquet
similarity index 100%
rename from core/src/test/resources/geoparquet/example-1.0.0-beta.1.parquet
rename to spark/common/src/test/resources/geoparquet/example-1.0.0-beta.1.parquet
diff --git a/core/src/test/resources/geoparquet/example1.parquet b/spark/common/src/test/resources/geoparquet/example1.parquet
similarity index 100%
rename from core/src/test/resources/geoparquet/example1.parquet
rename to spark/common/src/test/resources/geoparquet/example1.parquet
diff --git a/core/src/test/resources/geoparquet/example2.parquet b/spark/common/src/test/resources/geoparquet/example2.parquet
similarity index 100%
rename from core/src/test/resources/geoparquet/example2.parquet
rename to spark/common/src/test/resources/geoparquet/example2.parquet
diff --git a/core/src/test/resources/geoparquet/example3.parquet b/spark/common/src/test/resources/geoparquet/example3.parquet
similarity index 100%
rename from core/src/test/resources/geoparquet/example3.parquet
rename to spark/common/src/test/resources/geoparquet/example3.parquet
diff --git a/core/src/test/resources/geoparquet/plain.parquet b/spark/common/src/test/resources/geoparquet/plain.parquet
similarity index 100%
rename from core/src/test/resources/geoparquet/plain.parquet
rename to spark/common/src/test/resources/geoparquet/plain.parquet
diff --git a/core/src/test/resources/invalidSyntaxGeometriesJson.json b/spark/common/src/test/resources/invalidSyntaxGeometriesJson.json
similarity index 100%
rename from core/src/test/resources/invalidSyntaxGeometriesJson.json
rename to spark/common/src/test/resources/invalidSyntaxGeometriesJson.json
diff --git a/core/src/test/resources/linestring.test.properties b/spark/common/src/test/resources/linestring.test.properties
similarity index 100%
rename from core/src/test/resources/linestring.test.properties
rename to spark/common/src/test/resources/linestring.test.properties
diff --git a/core/src/test/resources/log4j2.properties b/spark/common/src/test/resources/log4j2.properties
similarity index 100%
rename from core/src/test/resources/log4j2.properties
rename to spark/common/src/test/resources/log4j2.properties
diff --git a/core/src/test/resources/point.test.properties b/spark/common/src/test/resources/point.test.properties
similarity index 100%
rename from core/src/test/resources/point.test.properties
rename to spark/common/src/test/resources/point.test.properties
diff --git a/core/src/test/resources/points.csv b/spark/common/src/test/resources/points.csv
similarity index 100%
rename from core/src/test/resources/points.csv
rename to spark/common/src/test/resources/points.csv
diff --git a/core/src/test/resources/points.json b/spark/common/src/test/resources/points.json
similarity index 100%
rename from core/src/test/resources/points.json
rename to spark/common/src/test/resources/points.json
diff --git a/core/src/test/resources/polygon.test.properties b/spark/common/src/test/resources/polygon.test.properties
similarity index 100%
rename from core/src/test/resources/polygon.test.properties
rename to spark/common/src/test/resources/polygon.test.properties
diff --git a/core/src/test/resources/primaryroads-linestring.csv b/spark/common/src/test/resources/primaryroads-linestring.csv
similarity index 100%
rename from core/src/test/resources/primaryroads-linestring.csv
rename to spark/common/src/test/resources/primaryroads-linestring.csv
diff --git a/core/src/test/resources/primaryroads-polygon.csv b/spark/common/src/test/resources/primaryroads-polygon.csv
similarity index 100%
rename from core/src/test/resources/primaryroads-polygon.csv
rename to spark/common/src/test/resources/primaryroads-polygon.csv
diff --git a/core/src/test/resources/primaryroads.csv b/spark/common/src/test/resources/primaryroads.csv
similarity index 100%
rename from core/src/test/resources/primaryroads.csv
rename to spark/common/src/test/resources/primaryroads.csv
diff --git a/core/src/test/resources/python/sampleLines b/spark/common/src/test/resources/python/sampleLines
similarity index 100%
rename from core/src/test/resources/python/sampleLines
rename to spark/common/src/test/resources/python/sampleLines
diff --git a/core/src/test/resources/python/samplePoints b/spark/common/src/test/resources/python/samplePoints
similarity index 100%
rename from core/src/test/resources/python/samplePoints
rename to spark/common/src/test/resources/python/samplePoints
diff --git a/core/src/test/resources/python/samplePolygons b/spark/common/src/test/resources/python/samplePolygons
similarity index 100%
rename from core/src/test/resources/python/samplePolygons
rename to spark/common/src/test/resources/python/samplePolygons
diff --git a/core/src/test/resources/python/simplePolygons b/spark/common/src/test/resources/python/simplePolygons
similarity index 100%
rename from core/src/test/resources/python/simplePolygons
rename to spark/common/src/test/resources/python/simplePolygons
diff --git a/core/src/test/resources/raster/raster_with_no_data/test5.tiff b/spark/common/src/test/resources/raster/raster_with_no_data/test5.tiff
similarity index 100%
rename from core/src/test/resources/raster/raster_with_no_data/test5.tiff
rename to spark/common/src/test/resources/raster/raster_with_no_data/test5.tiff
diff --git a/core/src/test/resources/raster/test1.tiff b/spark/common/src/test/resources/raster/test1.tiff
similarity index 100%
rename from core/src/test/resources/raster/test1.tiff
rename to spark/common/src/test/resources/raster/test1.tiff
diff --git a/core/src/test/resources/raster/test2.tiff b/spark/common/src/test/resources/raster/test2.tiff
similarity index 100%
rename from core/src/test/resources/raster/test2.tiff
rename to spark/common/src/test/resources/raster/test2.tiff
diff --git a/core/src/test/resources/raster/test3.tif b/spark/common/src/test/resources/raster/test3.tif
similarity index 100%
rename from core/src/test/resources/raster/test3.tif
rename to spark/common/src/test/resources/raster/test3.tif
diff --git a/core/src/test/resources/raster_asc/test1.asc b/spark/common/src/test/resources/raster_asc/test1.asc
similarity index 100%
rename from core/src/test/resources/raster_asc/test1.asc
rename to spark/common/src/test/resources/raster_asc/test1.asc
diff --git a/core/src/test/resources/raster_geotiff_color/FAA_UTM18N_NAD83.tif b/spark/common/src/test/resources/raster_geotiff_color/FAA_UTM18N_NAD83.tif
similarity index 100%
rename from core/src/test/resources/raster_geotiff_color/FAA_UTM18N_NAD83.tif
rename to spark/common/src/test/resources/raster_geotiff_color/FAA_UTM18N_NAD83.tif
diff --git a/core/src/test/resources/rectangle.test.properties b/spark/common/src/test/resources/rectangle.test.properties
similarity index 100%
rename from core/src/test/resources/rectangle.test.properties
rename to spark/common/src/test/resources/rectangle.test.properties
diff --git a/core/src/test/resources/shapefiles/dbf/map.dbf b/spark/common/src/test/resources/shapefiles/dbf/map.dbf
similarity index 100%
rename from core/src/test/resources/shapefiles/dbf/map.dbf
rename to spark/common/src/test/resources/shapefiles/dbf/map.dbf
diff --git a/core/src/test/resources/shapefiles/dbf/map.shp b/spark/common/src/test/resources/shapefiles/dbf/map.shp
similarity index 100%
rename from core/src/test/resources/shapefiles/dbf/map.shp
rename to spark/common/src/test/resources/shapefiles/dbf/map.shp
diff --git a/core/src/test/resources/shapefiles/dbf/map.shx b/spark/common/src/test/resources/shapefiles/dbf/map.shx
similarity index 100%
rename from core/src/test/resources/shapefiles/dbf/map.shx
rename to spark/common/src/test/resources/shapefiles/dbf/map.shx
diff --git a/core/src/test/resources/shapefiles/gis_osm_pois_free_1/gis_osm_pois_free_1.cpg b/spark/common/src/test/resources/shapefiles/gis_osm_pois_free_1/gis_osm_pois_free_1.cpg
similarity index 100%
rename from core/src/test/resources/shapefiles/gis_osm_pois_free_1/gis_osm_pois_free_1.cpg
rename to spark/common/src/test/resources/shapefiles/gis_osm_pois_free_1/gis_osm_pois_free_1.cpg
diff --git a/core/src/test/resources/shapefiles/gis_osm_pois_free_1/gis_osm_pois_free_1.dbf b/spark/common/src/test/resources/shapefiles/gis_osm_pois_free_1/gis_osm_pois_free_1.dbf
similarity index 100%
rename from core/src/test/resources/shapefiles/gis_osm_pois_free_1/gis_osm_pois_free_1.dbf
rename to spark/common/src/test/resources/shapefiles/gis_osm_pois_free_1/gis_osm_pois_free_1.dbf
diff --git a/core/src/test/resources/shapefiles/gis_osm_pois_free_1/gis_osm_pois_free_1.prj b/spark/common/src/test/resources/shapefiles/gis_osm_pois_free_1/gis_osm_pois_free_1.prj
similarity index 100%
rename from core/src/test/resources/shapefiles/gis_osm_pois_free_1/gis_osm_pois_free_1.prj
rename to spark/common/src/test/resources/shapefiles/gis_osm_pois_free_1/gis_osm_pois_free_1.prj
diff --git a/core/src/test/resources/shapefiles/gis_osm_pois_free_1/gis_osm_pois_free_1.shp b/spark/common/src/test/resources/shapefiles/gis_osm_pois_free_1/gis_osm_pois_free_1.shp
similarity index 100%
rename from core/src/test/resources/shapefiles/gis_osm_pois_free_1/gis_osm_pois_free_1.shp
rename to spark/common/src/test/resources/shapefiles/gis_osm_pois_free_1/gis_osm_pois_free_1.shp
diff --git a/core/src/test/resources/shapefiles/gis_osm_pois_free_1/gis_osm_pois_free_1.shx b/spark/common/src/test/resources/shapefiles/gis_osm_pois_free_1/gis_osm_pois_free_1.shx
similarity index 100%
rename from core/src/test/resources/shapefiles/gis_osm_pois_free_1/gis_osm_pois_free_1.shx
rename to spark/common/src/test/resources/shapefiles/gis_osm_pois_free_1/gis_osm_pois_free_1.shx
diff --git a/core/src/test/resources/shapefiles/missing/map.dbf b/spark/common/src/test/resources/shapefiles/missing/map.dbf
similarity index 100%
rename from core/src/test/resources/shapefiles/missing/map.dbf
rename to spark/common/src/test/resources/shapefiles/missing/map.dbf
diff --git a/core/src/test/resources/shapefiles/missing/map.shp b/spark/common/src/test/resources/shapefiles/missing/map.shp
similarity index 100%
rename from core/src/test/resources/shapefiles/missing/map.shp
rename to spark/common/src/test/resources/shapefiles/missing/map.shp
diff --git a/core/src/test/resources/shapefiles/missing/map.shx b/spark/common/src/test/resources/shapefiles/missing/map.shx
similarity index 100%
rename from core/src/test/resources/shapefiles/missing/map.shx
rename to spark/common/src/test/resources/shapefiles/missing/map.shx
diff --git a/core/src/test/resources/shapefiles/multipleshapefiles/map1.dbf b/spark/common/src/test/resources/shapefiles/multipleshapefiles/map1.dbf
similarity index 100%
rename from core/src/test/resources/shapefiles/multipleshapefiles/map1.dbf
rename to spark/common/src/test/resources/shapefiles/multipleshapefiles/map1.dbf
diff --git a/core/src/test/resources/shapefiles/multipleshapefiles/map1.shp b/spark/common/src/test/resources/shapefiles/multipleshapefiles/map1.shp
similarity index 100%
rename from core/src/test/resources/shapefiles/multipleshapefiles/map1.shp
rename to spark/common/src/test/resources/shapefiles/multipleshapefiles/map1.shp
diff --git a/core/src/test/resources/shapefiles/multipleshapefiles/map1.shx b/spark/common/src/test/resources/shapefiles/multipleshapefiles/map1.shx
similarity index 100%
rename from core/src/test/resources/shapefiles/multipleshapefiles/map1.shx
rename to spark/common/src/test/resources/shapefiles/multipleshapefiles/map1.shx
diff --git a/core/src/test/resources/shapefiles/multipleshapefiles/map2.dbf b/spark/common/src/test/resources/shapefiles/multipleshapefiles/map2.dbf
similarity index 100%
rename from core/src/test/resources/shapefiles/multipleshapefiles/map2.dbf
rename to spark/common/src/test/resources/shapefiles/multipleshapefiles/map2.dbf
diff --git a/core/src/test/resources/shapefiles/multipleshapefiles/map2.shp b/spark/common/src/test/resources/shapefiles/multipleshapefiles/map2.shp
similarity index 100%
rename from core/src/test/resources/shapefiles/multipleshapefiles/map2.shp
rename to spark/common/src/test/resources/shapefiles/multipleshapefiles/map2.shp
diff --git a/core/src/test/resources/shapefiles/multipleshapefiles/map2.shx b/spark/common/src/test/resources/shapefiles/multipleshapefiles/map2.shx
similarity index 100%
rename from core/src/test/resources/shapefiles/multipleshapefiles/map2.shx
rename to spark/common/src/test/resources/shapefiles/multipleshapefiles/map2.shx
diff --git a/core/src/test/resources/shapefiles/multipoint/map.dbf b/spark/common/src/test/resources/shapefiles/multipoint/map.dbf
similarity index 100%
rename from core/src/test/resources/shapefiles/multipoint/map.dbf
rename to spark/common/src/test/resources/shapefiles/multipoint/map.dbf
diff --git a/core/src/test/resources/shapefiles/multipoint/map.shp b/spark/common/src/test/resources/shapefiles/multipoint/map.shp
similarity index 100%
rename from core/src/test/resources/shapefiles/multipoint/map.shp
rename to spark/common/src/test/resources/shapefiles/multipoint/map.shp
diff --git a/core/src/test/resources/shapefiles/multipoint/map.shx b/spark/common/src/test/resources/shapefiles/multipoint/map.shx
similarity index 100%
rename from core/src/test/resources/shapefiles/multipoint/map.shx
rename to spark/common/src/test/resources/shapefiles/multipoint/map.shx
diff --git a/core/src/test/resources/shapefiles/point/map.dbf b/spark/common/src/test/resources/shapefiles/point/map.dbf
similarity index 100%
rename from core/src/test/resources/shapefiles/point/map.dbf
rename to spark/common/src/test/resources/shapefiles/point/map.dbf
diff --git a/core/src/test/resources/shapefiles/point/map.shp b/spark/common/src/test/resources/shapefiles/point/map.shp
similarity index 100%
rename from core/src/test/resources/shapefiles/point/map.shp
rename to spark/common/src/test/resources/shapefiles/point/map.shp
diff --git a/core/src/test/resources/shapefiles/point/map.shx b/spark/common/src/test/resources/shapefiles/point/map.shx
similarity index 100%
rename from core/src/test/resources/shapefiles/point/map.shx
rename to spark/common/src/test/resources/shapefiles/point/map.shx
diff --git a/core/src/test/resources/shapefiles/polygon/map.dbf b/spark/common/src/test/resources/shapefiles/polygon/map.dbf
similarity index 100%
rename from core/src/test/resources/shapefiles/polygon/map.dbf
rename to spark/common/src/test/resources/shapefiles/polygon/map.dbf
diff --git a/core/src/test/resources/shapefiles/polygon/map.shp b/spark/common/src/test/resources/shapefiles/polygon/map.shp
similarity index 100%
rename from core/src/test/resources/shapefiles/polygon/map.shp
rename to spark/common/src/test/resources/shapefiles/polygon/map.shp
diff --git a/core/src/test/resources/shapefiles/polygon/map.shx b/spark/common/src/test/resources/shapefiles/polygon/map.shx
similarity index 100%
rename from core/src/test/resources/shapefiles/polygon/map.shx
rename to spark/common/src/test/resources/shapefiles/polygon/map.shx
diff --git a/core/src/test/resources/shapefiles/polygon/map.xml b/spark/common/src/test/resources/shapefiles/polygon/map.xml
similarity index 100%
rename from core/src/test/resources/shapefiles/polygon/map.xml
rename to spark/common/src/test/resources/shapefiles/polygon/map.xml
diff --git a/core/src/test/resources/shapefiles/polygon/map1.xml b/spark/common/src/test/resources/shapefiles/polygon/map1.xml
similarity index 100%
rename from core/src/test/resources/shapefiles/polygon/map1.xml
rename to spark/common/src/test/resources/shapefiles/polygon/map1.xml
diff --git a/core/src/test/resources/shapefiles/polyline/map.dbf b/spark/common/src/test/resources/shapefiles/polyline/map.dbf
similarity index 100%
rename from core/src/test/resources/shapefiles/polyline/map.dbf
rename to spark/common/src/test/resources/shapefiles/polyline/map.dbf
diff --git a/core/src/test/resources/shapefiles/polyline/map.shp b/spark/common/src/test/resources/shapefiles/polyline/map.shp
similarity index 100%
rename from core/src/test/resources/shapefiles/polyline/map.shp
rename to spark/common/src/test/resources/shapefiles/polyline/map.shp
diff --git a/core/src/test/resources/shapefiles/polyline/map.shx b/spark/common/src/test/resources/shapefiles/polyline/map.shx
similarity index 100%
rename from core/src/test/resources/shapefiles/polyline/map.shx
rename to spark/common/src/test/resources/shapefiles/polyline/map.shx
diff --git a/core/src/test/resources/shapefiles/unsupported/UrbAdm3D_142166_Bu_Ground.dbf b/spark/common/src/test/resources/shapefiles/unsupported/UrbAdm3D_142166_Bu_Ground.dbf
similarity index 100%
rename from core/src/test/resources/shapefiles/unsupported/UrbAdm3D_142166_Bu_Ground.dbf
rename to spark/common/src/test/resources/shapefiles/unsupported/UrbAdm3D_142166_Bu_Ground.dbf
diff --git a/core/src/test/resources/shapefiles/unsupported/UrbAdm3D_142166_Bu_Ground.prj b/spark/common/src/test/resources/shapefiles/unsupported/UrbAdm3D_142166_Bu_Ground.prj
similarity index 100%
rename from core/src/test/resources/shapefiles/unsupported/UrbAdm3D_142166_Bu_Ground.prj
rename to spark/common/src/test/resources/shapefiles/unsupported/UrbAdm3D_142166_Bu_Ground.prj
diff --git a/core/src/test/resources/shapefiles/unsupported/UrbAdm3D_142166_Bu_Ground.shp b/spark/common/src/test/resources/shapefiles/unsupported/UrbAdm3D_142166_Bu_Ground.shp
similarity index 100%
rename from core/src/test/resources/shapefiles/unsupported/UrbAdm3D_142166_Bu_Ground.shp
rename to spark/common/src/test/resources/shapefiles/unsupported/UrbAdm3D_142166_Bu_Ground.shp
diff --git a/core/src/test/resources/shapefiles/unsupported/UrbAdm3D_142166_Bu_Ground.shx b/spark/common/src/test/resources/shapefiles/unsupported/UrbAdm3D_142166_Bu_Ground.shx
similarity index 100%
rename from core/src/test/resources/shapefiles/unsupported/UrbAdm3D_142166_Bu_Ground.shx
rename to spark/common/src/test/resources/shapefiles/unsupported/UrbAdm3D_142166_Bu_Ground.shx
diff --git a/core/src/test/resources/small/areas.csv b/spark/common/src/test/resources/small/areas.csv
similarity index 100%
rename from core/src/test/resources/small/areas.csv
rename to spark/common/src/test/resources/small/areas.csv
diff --git a/core/src/test/resources/small/onepoint.csv b/spark/common/src/test/resources/small/onepoint.csv
similarity index 100%
rename from core/src/test/resources/small/onepoint.csv
rename to spark/common/src/test/resources/small/onepoint.csv
diff --git a/core/src/test/resources/small/points.csv b/spark/common/src/test/resources/small/points.csv
similarity index 100%
rename from core/src/test/resources/small/points.csv
rename to spark/common/src/test/resources/small/points.csv
diff --git a/core/src/test/resources/spatial-join-query-window.tsv b/spark/common/src/test/resources/spatial-join-query-window.tsv
similarity index 100%
rename from core/src/test/resources/spatial-join-query-window.tsv
rename to spark/common/src/test/resources/spatial-join-query-window.tsv
diff --git a/core/src/test/resources/spatial-predicates-test-data.tsv b/spark/common/src/test/resources/spatial-predicates-test-data.tsv
similarity index 100%
rename from core/src/test/resources/spatial-predicates-test-data.tsv
rename to spark/common/src/test/resources/spatial-predicates-test-data.tsv
diff --git a/core/src/test/resources/streaming/geometry_example/part-00000-936c6c14-2218-4c80-a179-77f67180b08c-c000.snappy.parquet b/spark/common/src/test/resources/streaming/geometry_example/part-00000-936c6c14-2218-4c80-a179-77f67180b08c-c000.snappy.parquet
similarity index 100%
rename from core/src/test/resources/streaming/geometry_example/part-00000-936c6c14-2218-4c80-a179-77f67180b08c-c000.snappy.parquet
rename to spark/common/src/test/resources/streaming/geometry_example/part-00000-936c6c14-2218-4c80-a179-77f67180b08c-c000.snappy.parquet
diff --git a/core/src/test/resources/subdivide/subdivide_expected_result.txt b/spark/common/src/test/resources/subdivide/subdivide_expected_result.txt
similarity index 100%
rename from core/src/test/resources/subdivide/subdivide_expected_result.txt
rename to spark/common/src/test/resources/subdivide/subdivide_expected_result.txt
diff --git a/core/src/test/resources/subdivide/subdivide_input_geometries.txt b/spark/common/src/test/resources/subdivide/subdivide_input_geometries.txt
similarity index 100%
rename from core/src/test/resources/subdivide/subdivide_input_geometries.txt
rename to spark/common/src/test/resources/subdivide/subdivide_input_geometries.txt
diff --git a/core/src/test/resources/testContainsId.json b/spark/common/src/test/resources/testContainsId.json
similarity index 100%
rename from core/src/test/resources/testContainsId.json
rename to spark/common/src/test/resources/testContainsId.json
diff --git a/core/src/test/resources/testInvalidPolygon.json b/spark/common/src/test/resources/testInvalidPolygon.json
similarity index 100%
rename from core/src/test/resources/testInvalidPolygon.json
rename to spark/common/src/test/resources/testInvalidPolygon.json
diff --git a/core/src/test/resources/testPolygon.json b/spark/common/src/test/resources/testPolygon.json
similarity index 100%
rename from core/src/test/resources/testPolygon.json
rename to spark/common/src/test/resources/testPolygon.json
diff --git a/core/src/test/resources/test_intersection_aggregate.tsv b/spark/common/src/test/resources/test_intersection_aggregate.tsv
similarity index 100%
rename from core/src/test/resources/test_intersection_aggregate.tsv
rename to spark/common/src/test/resources/test_intersection_aggregate.tsv
diff --git a/core/src/test/resources/test_intersection_aggregate_no_intersection.tsv b/spark/common/src/test/resources/test_intersection_aggregate_no_intersection.tsv
similarity index 100%
rename from core/src/test/resources/test_intersection_aggregate_no_intersection.tsv
rename to spark/common/src/test/resources/test_intersection_aggregate_no_intersection.tsv
diff --git a/core/src/test/resources/testenvelope.csv b/spark/common/src/test/resources/testenvelope.csv
similarity index 100%
rename from core/src/test/resources/testenvelope.csv
rename to spark/common/src/test/resources/testenvelope.csv
diff --git a/core/src/test/resources/testenvelope_overlap.csv b/spark/common/src/test/resources/testenvelope_overlap.csv
similarity index 100%
rename from core/src/test/resources/testenvelope_overlap.csv
rename to spark/common/src/test/resources/testenvelope_overlap.csv
diff --git a/core/src/test/resources/testpoint.csv b/spark/common/src/test/resources/testpoint.csv
similarity index 100%
rename from core/src/test/resources/testpoint.csv
rename to spark/common/src/test/resources/testpoint.csv
diff --git a/core/src/test/resources/testpolygon-no-property.json b/spark/common/src/test/resources/testpolygon-no-property.json
similarity index 100%
rename from core/src/test/resources/testpolygon-no-property.json
rename to spark/common/src/test/resources/testpolygon-no-property.json
diff --git a/core/src/test/resources/testpolygon-with-null-property-value.json b/spark/common/src/test/resources/testpolygon-with-null-property-value.json
similarity index 100%
rename from core/src/test/resources/testpolygon-with-null-property-value.json
rename to spark/common/src/test/resources/testpolygon-with-null-property-value.json
diff --git a/core/src/test/resources/testunion.csv b/spark/common/src/test/resources/testunion.csv
similarity index 100%
rename from core/src/test/resources/testunion.csv
rename to spark/common/src/test/resources/testunion.csv
diff --git a/core/src/test/resources/zcta510-small.csv b/spark/common/src/test/resources/zcta510-small.csv
similarity index 100%
rename from core/src/test/resources/zcta510-small.csv
rename to spark/common/src/test/resources/zcta510-small.csv
diff --git a/core/src/test/resources/zcta510.csv b/spark/common/src/test/resources/zcta510.csv
similarity index 100%
rename from core/src/test/resources/zcta510.csv
rename to spark/common/src/test/resources/zcta510.csv
diff --git a/core/src/test/scala/org/apache/sedona/core/monitoring/MetricSuite.scala b/spark/common/src/test/scala/org/apache/sedona/core/monitoring/MetricSuite.scala
similarity index 90%
rename from core/src/test/scala/org/apache/sedona/core/monitoring/MetricSuite.scala
rename to spark/common/src/test/scala/org/apache/sedona/core/monitoring/MetricSuite.scala
index 88256c69c..5e589ec16 100644
--- a/core/src/test/scala/org/apache/sedona/core/monitoring/MetricSuite.scala
+++ b/spark/common/src/test/scala/org/apache/sedona/core/monitoring/MetricSuite.scala
@@ -19,13 +19,12 @@
 
 package org.apache.sedona.core.monitoring
 
-import org.apache.sedona.core.SparkUtil
+import org.apache.sedona.sql.TestBaseScala
 import org.apache.spark.TaskContext
-import org.scalatest.FunSuiteLike
 
-class MetricSuite extends SparkUtil with FunSuiteLike {
+class MetricSuite extends TestBaseScala {
 
-  test("simple count") {
+  it("simple count") {
 
     val data = 1 to 100
     val rdd = sc.parallelize(data, 5)
diff --git a/core/src/test/scala/org/apache/sedona/core/scalaTest.scala b/spark/common/src/test/scala/org/apache/sedona/core/scalaTest.scala
similarity index 90%
rename from core/src/test/scala/org/apache/sedona/core/scalaTest.scala
rename to spark/common/src/test/scala/org/apache/sedona/core/scalaTest.scala
index 6cc59c7b4..01e9815ed 100644
--- a/core/src/test/scala/org/apache/sedona/core/scalaTest.scala
+++ b/spark/common/src/test/scala/org/apache/sedona/core/scalaTest.scala
@@ -25,11 +25,10 @@ import org.apache.sedona.core.formatMapper.EarthdataHDFPointMapper
 import org.apache.sedona.core.spatialOperator.JoinQuery.JoinParams
 import org.apache.sedona.core.spatialOperator.{JoinQuery, KNNQuery, RangeQuery, SpatialPredicate}
 import org.apache.sedona.core.spatialRDD.{CircleRDD, PointRDD, PolygonRDD}
+import org.apache.sedona.sql.TestBaseScala
 import org.locationtech.jts.geom.{Coordinate, Envelope, GeometryFactory}
 
-class scalaTest extends SparkUtil {
-
-  val resourceFolder = System.getProperty("user.dir") + "/src/test/resources/"
+class scalaTest extends TestBaseScala {
 
   val PointRDDInputLocation = resourceFolder + "arealm-small.csv"
   val PointRDDSplitter = FileDataSplitter.CSV
@@ -50,28 +49,28 @@ class scalaTest extends SparkUtil {
   val joinQueryPartitioningType = GridType.QUADTREE
   val eachQueryLoopTimes = 1
 
-  test("should pass the empty constructor test") {
+  it("should pass the empty constructor test") {
     val objectRDD = new PointRDD(sc, PointRDDInputLocation, PointRDDOffset, PointRDDSplitter, false)
     val objectRDDcopy = new PointRDD()
     objectRDDcopy.rawSpatialRDD = objectRDD.rawSpatialRDD
     objectRDDcopy.analyze()
   }
 
-  test("should pass spatial range query with spatial predicate") {
+  it("should pass spatial range query with spatial predicate") {
     val objectRDD = new PointRDD(sc, PointRDDInputLocation, PointRDDOffset, PointRDDSplitter, false)
     for (i <- 1 to eachQueryLoopTimes) {
       val resultSize = RangeQuery.SpatialRangeQuery(objectRDD, rangeQueryWindow, SpatialPredicate.COVERED_BY, false).count
     }
   }
 
-  test("should pass spatial range query") {
+  it("should pass spatial range query") {
     val objectRDD = new PointRDD(sc, PointRDDInputLocation, PointRDDOffset, PointRDDSplitter, false)
     for (i <- 1 to eachQueryLoopTimes) {
       val resultSize = RangeQuery.SpatialRangeQuery(objectRDD, rangeQueryWindow, false, false).count
     }
   }
 
-  test("should pass spatial range query using index") {
+  it("should pass spatial range query using index") {
     val objectRDD = new PointRDD(sc, PointRDDInputLocation, PointRDDOffset, PointRDDSplitter, false)
     objectRDD.buildIndex(PointRDDIndexType, false)
     for (i <- 1 to eachQueryLoopTimes) {
@@ -79,14 +78,14 @@ class scalaTest extends SparkUtil {
     }
   }
 
-  test("should pass spatial knn query") {
+  it("should pass spatial knn query") {
     val objectRDD = new PointRDD(sc, PointRDDInputLocation, PointRDDOffset, PointRDDSplitter, false)
     for (i <- 1 to eachQueryLoopTimes) {
       val result = KNNQuery.SpatialKnnQuery(objectRDD, kNNQueryPoint, 1000, false)
     }
   }
 
-  test("should pass spatial knn query using index") {
+  it("should pass spatial knn query using index") {
     val objectRDD = new PointRDD(sc, PointRDDInputLocation, PointRDDOffset, PointRDDSplitter, false)
     objectRDD.buildIndex(PointRDDIndexType, false)
     for (i <- 1 to eachQueryLoopTimes) {
@@ -94,7 +93,7 @@ class scalaTest extends SparkUtil {
     }
   }
 
-  test("should pass spatial join query with spatial predicate") {
+  it("should pass spatial join query with spatial predicate") {
     val queryWindowRDD = new PolygonRDD(sc, PolygonRDDInputLocation, PolygonRDDStartOffset, PolygonRDDEndOffset, PolygonRDDSplitter, true)
     val objectRDD = new PointRDD(sc, PointRDDInputLocation, PointRDDOffset, PointRDDSplitter, false)
     objectRDD.analyze()
@@ -106,7 +105,7 @@ class scalaTest extends SparkUtil {
     }
   }
 
-  test("should pass spatial join query") {
+  it("should pass spatial join query") {
     val queryWindowRDD = new PolygonRDD(sc, PolygonRDDInputLocation, PolygonRDDStartOffset, PolygonRDDEndOffset, PolygonRDDSplitter, true)
     val objectRDD = new PointRDD(sc, PointRDDInputLocation, PointRDDOffset, PointRDDSplitter, false)
     objectRDD.analyze()
@@ -118,7 +117,7 @@ class scalaTest extends SparkUtil {
     }
   }
 
-  test("should pass spatial join query using index on points") {
+  it("should pass spatial join query using index on points") {
     val queryWindowRDD = new PolygonRDD(sc, PolygonRDDInputLocation, PolygonRDDStartOffset, PolygonRDDEndOffset, PolygonRDDSplitter, true)
     val objectRDD = new PointRDD(sc, PointRDDInputLocation, PointRDDOffset, PointRDDSplitter, false)
     objectRDD.analyze()
@@ -132,7 +131,7 @@ class scalaTest extends SparkUtil {
     }
   }
 
-  test("should pass spatial join query using index on polygons") {
+  it("should pass spatial join query using index on polygons") {
     val queryWindowRDD = new PolygonRDD(sc, PolygonRDDInputLocation, PolygonRDDStartOffset, PolygonRDDEndOffset, PolygonRDDSplitter, true)
     val objectRDD = new PointRDD(sc, PointRDDInputLocation, PointRDDOffset, PointRDDSplitter, false)
     objectRDD.analyze()
@@ -146,7 +145,7 @@ class scalaTest extends SparkUtil {
     }
   }
 
-  test("should pass spatial join query and build index on points the fly") {
+  it("should pass spatial join query and build index on points the fly") {
     val queryWindowRDD = new PolygonRDD(sc, PolygonRDDInputLocation, PolygonRDDStartOffset, PolygonRDDEndOffset, PolygonRDDSplitter, true)
     val objectRDD = new PointRDD(sc, PointRDDInputLocation, PointRDDOffset, PointRDDSplitter, false)
     objectRDD.analyze()
@@ -158,7 +157,7 @@ class scalaTest extends SparkUtil {
     }
   }
 
-  test("should pass spatial join query and build index on polygons on the fly") {
+  it("should pass spatial join query and build index on polygons on the fly") {
     val queryWindowRDD = new PolygonRDD(sc, PolygonRDDInputLocation, PolygonRDDStartOffset, PolygonRDDEndOffset, PolygonRDDSplitter, true)
     val objectRDD = new PointRDD(sc, PointRDDInputLocation, PointRDDOffset, PointRDDSplitter, false)
     objectRDD.analyze()
@@ -171,7 +170,7 @@ class scalaTest extends SparkUtil {
     }
   }
 
-  test("should pass distance join query with spatial predicate") {
+  it("should pass distance join query with spatial predicate") {
     val objectRDD = new PointRDD(sc, PointRDDInputLocation, PointRDDOffset, PointRDDSplitter, false)
     val queryWindowRDD = new CircleRDD(objectRDD, 0.1)
     objectRDD.analyze()
@@ -183,7 +182,7 @@ class scalaTest extends SparkUtil {
     }
   }
 
-  test("should pass distance join query") {
+  it("should pass distance join query") {
     val objectRDD = new PointRDD(sc, PointRDDInputLocation, PointRDDOffset, PointRDDSplitter, false)
     val queryWindowRDD = new CircleRDD(objectRDD, 0.1)
     objectRDD.analyze()
@@ -195,7 +194,7 @@ class scalaTest extends SparkUtil {
     }
   }
 
-  test("should pass distance join query using index") {
+  it("should pass distance join query using index") {
     val objectRDD = new PointRDD(sc, PointRDDInputLocation, PointRDDOffset, PointRDDSplitter, false)
     val queryWindowRDD = new CircleRDD(objectRDD, 0.1)
     objectRDD.analyze()
diff --git a/sql/common/src/test/scala/org/apache/sedona/python/wrapper/TestToPythonSerialization.scala b/spark/common/src/test/scala/org/apache/sedona/python/wrapper/TestToPythonSerialization.scala
similarity index 100%
rename from sql/common/src/test/scala/org/apache/sedona/python/wrapper/TestToPythonSerialization.scala
rename to spark/common/src/test/scala/org/apache/sedona/python/wrapper/TestToPythonSerialization.scala
diff --git a/sql/common/src/test/scala/org/apache/sedona/sql/BroadcastIndexJoinSuite.scala b/spark/common/src/test/scala/org/apache/sedona/sql/BroadcastIndexJoinSuite.scala
similarity index 100%
rename from sql/common/src/test/scala/org/apache/sedona/sql/BroadcastIndexJoinSuite.scala
rename to spark/common/src/test/scala/org/apache/sedona/sql/BroadcastIndexJoinSuite.scala
diff --git a/sql/common/src/test/scala/org/apache/sedona/sql/DeduplicationSuite.scala b/spark/common/src/test/scala/org/apache/sedona/sql/DeduplicationSuite.scala
similarity index 100%
rename from sql/common/src/test/scala/org/apache/sedona/sql/DeduplicationSuite.scala
rename to spark/common/src/test/scala/org/apache/sedona/sql/DeduplicationSuite.scala
diff --git a/sql/common/src/test/scala/org/apache/sedona/sql/GeometrySample.scala b/spark/common/src/test/scala/org/apache/sedona/sql/GeometrySample.scala
similarity index 100%
rename from sql/common/src/test/scala/org/apache/sedona/sql/GeometrySample.scala
rename to spark/common/src/test/scala/org/apache/sedona/sql/GeometrySample.scala
diff --git a/sql/common/src/test/scala/org/apache/sedona/sql/GeometryUdtTestScala.scala b/spark/common/src/test/scala/org/apache/sedona/sql/GeometryUdtTestScala.scala
similarity index 100%
rename from sql/common/src/test/scala/org/apache/sedona/sql/GeometryUdtTestScala.scala
rename to spark/common/src/test/scala/org/apache/sedona/sql/GeometryUdtTestScala.scala
diff --git a/sql/common/src/test/scala/org/apache/sedona/sql/RasterJoinSuite.scala b/spark/common/src/test/scala/org/apache/sedona/sql/RasterJoinSuite.scala
similarity index 100%
rename from sql/common/src/test/scala/org/apache/sedona/sql/RasterJoinSuite.scala
rename to spark/common/src/test/scala/org/apache/sedona/sql/RasterJoinSuite.scala
diff --git a/sql/common/src/test/scala/org/apache/sedona/sql/SpatialJoinSuite.scala b/spark/common/src/test/scala/org/apache/sedona/sql/SpatialJoinSuite.scala
similarity index 100%
rename from sql/common/src/test/scala/org/apache/sedona/sql/SpatialJoinSuite.scala
rename to spark/common/src/test/scala/org/apache/sedona/sql/SpatialJoinSuite.scala
diff --git a/sql/common/src/test/scala/org/apache/sedona/sql/SphereDistanceJoinSuite.scala b/spark/common/src/test/scala/org/apache/sedona/sql/SphereDistanceJoinSuite.scala
similarity index 100%
rename from sql/common/src/test/scala/org/apache/sedona/sql/SphereDistanceJoinSuite.scala
rename to spark/common/src/test/scala/org/apache/sedona/sql/SphereDistanceJoinSuite.scala
diff --git a/sql/common/src/test/scala/org/apache/sedona/sql/TestBaseScala.scala b/spark/common/src/test/scala/org/apache/sedona/sql/TestBaseScala.scala
similarity index 98%
rename from sql/common/src/test/scala/org/apache/sedona/sql/TestBaseScala.scala
rename to spark/common/src/test/scala/org/apache/sedona/sql/TestBaseScala.scala
index 41e140c57..b54ac4008 100644
--- a/sql/common/src/test/scala/org/apache/sedona/sql/TestBaseScala.scala
+++ b/spark/common/src/test/scala/org/apache/sedona/sql/TestBaseScala.scala
@@ -45,7 +45,7 @@ trait TestBaseScala extends FunSpec with BeforeAndAfterAll {
 
   val sc = sparkSession.sparkContext
 
-  val resourceFolder = System.getProperty("user.dir") + "/../../core/src/test/resources/"
+  val resourceFolder = System.getProperty("user.dir") + "/src/test/resources/"
   val mixedWkbGeometryInputLocation = resourceFolder + "county_small_wkb.tsv"
   val mixedWktGeometryInputLocation = resourceFolder + "county_small.tsv"
   val shapefileInputLocation = resourceFolder + "shapefiles/dbf"
@@ -79,7 +79,7 @@ trait TestBaseScala extends FunSpec with BeforeAndAfterAll {
 
   override def afterAll(): Unit = {
     //SedonaSQLRegistrator.dropAll(spark)
-    //spark.stop
+//    sparkSession.stop
   }
 
   def loadCsv(path: String): DataFrame = {
diff --git a/sql/common/src/test/scala/org/apache/sedona/sql/adapterTestScala.scala b/spark/common/src/test/scala/org/apache/sedona/sql/adapterTestScala.scala
similarity index 100%
rename from sql/common/src/test/scala/org/apache/sedona/sql/adapterTestScala.scala
rename to spark/common/src/test/scala/org/apache/sedona/sql/adapterTestScala.scala
diff --git a/sql/common/src/test/scala/org/apache/sedona/sql/aggregateFunctionTestScala.scala b/spark/common/src/test/scala/org/apache/sedona/sql/aggregateFunctionTestScala.scala
similarity index 100%
rename from sql/common/src/test/scala/org/apache/sedona/sql/aggregateFunctionTestScala.scala
rename to spark/common/src/test/scala/org/apache/sedona/sql/aggregateFunctionTestScala.scala
diff --git a/sql/common/src/test/scala/org/apache/sedona/sql/constructorTestScala.scala b/spark/common/src/test/scala/org/apache/sedona/sql/constructorTestScala.scala
similarity index 100%
rename from sql/common/src/test/scala/org/apache/sedona/sql/constructorTestScala.scala
rename to spark/common/src/test/scala/org/apache/sedona/sql/constructorTestScala.scala
diff --git a/sql/common/src/test/scala/org/apache/sedona/sql/dataFrameAPITestScala.scala b/spark/common/src/test/scala/org/apache/sedona/sql/dataFrameAPITestScala.scala
similarity index 100%
rename from sql/common/src/test/scala/org/apache/sedona/sql/dataFrameAPITestScala.scala
rename to spark/common/src/test/scala/org/apache/sedona/sql/dataFrameAPITestScala.scala
diff --git a/sql/common/src/test/scala/org/apache/sedona/sql/functionTestScala.scala b/spark/common/src/test/scala/org/apache/sedona/sql/functionTestScala.scala
similarity index 100%
rename from sql/common/src/test/scala/org/apache/sedona/sql/functionTestScala.scala
rename to spark/common/src/test/scala/org/apache/sedona/sql/functionTestScala.scala
diff --git a/sql/common/src/test/scala/org/apache/sedona/sql/functions/FunctionsHelper.scala b/spark/common/src/test/scala/org/apache/sedona/sql/functions/FunctionsHelper.scala
similarity index 100%
rename from sql/common/src/test/scala/org/apache/sedona/sql/functions/FunctionsHelper.scala
rename to spark/common/src/test/scala/org/apache/sedona/sql/functions/FunctionsHelper.scala
diff --git a/sql/common/src/test/scala/org/apache/sedona/sql/functions/STS2CellIDs.scala b/spark/common/src/test/scala/org/apache/sedona/sql/functions/STS2CellIDs.scala
similarity index 100%
rename from sql/common/src/test/scala/org/apache/sedona/sql/functions/STS2CellIDs.scala
rename to spark/common/src/test/scala/org/apache/sedona/sql/functions/STS2CellIDs.scala
diff --git a/sql/common/src/test/scala/org/apache/sedona/sql/functions/StMakePolygonSpec.scala b/spark/common/src/test/scala/org/apache/sedona/sql/functions/StMakePolygonSpec.scala
similarity index 100%
rename from sql/common/src/test/scala/org/apache/sedona/sql/functions/StMakePolygonSpec.scala
rename to spark/common/src/test/scala/org/apache/sedona/sql/functions/StMakePolygonSpec.scala
diff --git a/sql/common/src/test/scala/org/apache/sedona/sql/functions/TestGeometrySimplify.scala b/spark/common/src/test/scala/org/apache/sedona/sql/functions/TestGeometrySimplify.scala
similarity index 100%
rename from sql/common/src/test/scala/org/apache/sedona/sql/functions/TestGeometrySimplify.scala
rename to spark/common/src/test/scala/org/apache/sedona/sql/functions/TestGeometrySimplify.scala
diff --git a/sql/common/src/test/scala/org/apache/sedona/sql/functions/TestStSubDivide.scala b/spark/common/src/test/scala/org/apache/sedona/sql/functions/TestStSubDivide.scala
similarity index 97%
rename from sql/common/src/test/scala/org/apache/sedona/sql/functions/TestStSubDivide.scala
rename to spark/common/src/test/scala/org/apache/sedona/sql/functions/TestStSubDivide.scala
index 9dd186320..48db90576 100644
--- a/sql/common/src/test/scala/org/apache/sedona/sql/functions/TestStSubDivide.scala
+++ b/spark/common/src/test/scala/org/apache/sedona/sql/functions/TestStSubDivide.scala
@@ -47,7 +47,7 @@ class TestStSubDivide extends AnyFunSuite with Matchers with TableDrivenProperty
 
   object Fixtures {
 
-    val resourceFolder: String = System.getProperty("user.dir") + "/../../core/src/test/resources/"
+    val resourceFolder = System.getProperty("user.dir") + "/src/test/resources/"
 
     private val geometries: Seq[(String, String, Int, Seq[String])] = {
 
diff --git a/sql/common/src/test/scala/org/apache/sedona/sql/functions/collect/TestStCollect.scala b/spark/common/src/test/scala/org/apache/sedona/sql/functions/collect/TestStCollect.scala
similarity index 100%
rename from sql/common/src/test/scala/org/apache/sedona/sql/functions/collect/TestStCollect.scala
rename to spark/common/src/test/scala/org/apache/sedona/sql/functions/collect/TestStCollect.scala
diff --git a/sql/common/src/test/scala/org/apache/sedona/sql/functions/geohash/Fixtures.scala b/spark/common/src/test/scala/org/apache/sedona/sql/functions/geohash/Fixtures.scala
similarity index 100%
rename from sql/common/src/test/scala/org/apache/sedona/sql/functions/geohash/Fixtures.scala
rename to spark/common/src/test/scala/org/apache/sedona/sql/functions/geohash/Fixtures.scala
diff --git a/sql/common/src/test/scala/org/apache/sedona/sql/functions/geohash/TestCalculatingGeoHash.scala b/spark/common/src/test/scala/org/apache/sedona/sql/functions/geohash/TestCalculatingGeoHash.scala
similarity index 100%
rename from sql/common/src/test/scala/org/apache/sedona/sql/functions/geohash/TestCalculatingGeoHash.scala
rename to spark/common/src/test/scala/org/apache/sedona/sql/functions/geohash/TestCalculatingGeoHash.scala
diff --git a/sql/common/src/test/scala/org/apache/sedona/sql/functions/geohash/TestGeoHashDecoder.scala b/spark/common/src/test/scala/org/apache/sedona/sql/functions/geohash/TestGeoHashDecoder.scala
similarity index 100%
rename from sql/common/src/test/scala/org/apache/sedona/sql/functions/geohash/TestGeoHashDecoder.scala
rename to spark/common/src/test/scala/org/apache/sedona/sql/functions/geohash/TestGeoHashDecoder.scala
diff --git a/sql/common/src/test/scala/org/apache/sedona/sql/functions/geohash/TestStGeoHash.scala b/spark/common/src/test/scala/org/apache/sedona/sql/functions/geohash/TestStGeoHash.scala
similarity index 100%
rename from sql/common/src/test/scala/org/apache/sedona/sql/functions/geohash/TestStGeoHash.scala
rename to spark/common/src/test/scala/org/apache/sedona/sql/functions/geohash/TestStGeoHash.scala
diff --git a/sql/common/src/test/scala/org/apache/sedona/sql/functions/geohash/TestStGeometryFromGeoHash.scala b/spark/common/src/test/scala/org/apache/sedona/sql/functions/geohash/TestStGeometryFromGeoHash.scala
similarity index 100%
rename from sql/common/src/test/scala/org/apache/sedona/sql/functions/geohash/TestStGeometryFromGeoHash.scala
rename to spark/common/src/test/scala/org/apache/sedona/sql/functions/geohash/TestStGeometryFromGeoHash.scala
diff --git a/sql/common/src/test/scala/org/apache/sedona/sql/implicits.scala b/spark/common/src/test/scala/org/apache/sedona/sql/implicits.scala
similarity index 100%
rename from sql/common/src/test/scala/org/apache/sedona/sql/implicits.scala
rename to spark/common/src/test/scala/org/apache/sedona/sql/implicits.scala
diff --git a/sql/common/src/test/scala/org/apache/sedona/sql/ogc/GeometryTypesAndFunctionsTestScala.scala b/spark/common/src/test/scala/org/apache/sedona/sql/ogc/GeometryTypesAndFunctionsTestScala.scala
similarity index 100%
rename from sql/common/src/test/scala/org/apache/sedona/sql/ogc/GeometryTypesAndFunctionsTestScala.scala
rename to spark/common/src/test/scala/org/apache/sedona/sql/ogc/GeometryTypesAndFunctionsTestScala.scala
diff --git a/sql/common/src/test/scala/org/apache/sedona/sql/ogc/package-info.java b/spark/common/src/test/scala/org/apache/sedona/sql/ogc/package-info.java
similarity index 100%
rename from sql/common/src/test/scala/org/apache/sedona/sql/ogc/package-info.java
rename to spark/common/src/test/scala/org/apache/sedona/sql/ogc/package-info.java
diff --git a/sql/common/src/test/scala/org/apache/sedona/sql/predicateJoinTestScala.scala b/spark/common/src/test/scala/org/apache/sedona/sql/predicateJoinTestScala.scala
similarity index 100%
rename from sql/common/src/test/scala/org/apache/sedona/sql/predicateJoinTestScala.scala
rename to spark/common/src/test/scala/org/apache/sedona/sql/predicateJoinTestScala.scala
diff --git a/sql/common/src/test/scala/org/apache/sedona/sql/predicateTestScala.scala b/spark/common/src/test/scala/org/apache/sedona/sql/predicateTestScala.scala
similarity index 100%
rename from sql/common/src/test/scala/org/apache/sedona/sql/predicateTestScala.scala
rename to spark/common/src/test/scala/org/apache/sedona/sql/predicateTestScala.scala
diff --git a/sql/common/src/test/scala/org/apache/sedona/sql/rasterIOTest.scala b/spark/common/src/test/scala/org/apache/sedona/sql/rasterIOTest.scala
similarity index 100%
rename from sql/common/src/test/scala/org/apache/sedona/sql/rasterIOTest.scala
rename to spark/common/src/test/scala/org/apache/sedona/sql/rasterIOTest.scala
diff --git a/sql/common/src/test/scala/org/apache/sedona/sql/rasteralgebraTest.scala b/spark/common/src/test/scala/org/apache/sedona/sql/rasteralgebraTest.scala
similarity index 100%
rename from sql/common/src/test/scala/org/apache/sedona/sql/rasteralgebraTest.scala
rename to spark/common/src/test/scala/org/apache/sedona/sql/rasteralgebraTest.scala
diff --git a/sql/common/src/test/scala/org/apache/sedona/sql/serdeAwareTest.scala b/spark/common/src/test/scala/org/apache/sedona/sql/serdeAwareTest.scala
similarity index 100%
rename from sql/common/src/test/scala/org/apache/sedona/sql/serdeAwareTest.scala
rename to spark/common/src/test/scala/org/apache/sedona/sql/serdeAwareTest.scala
diff --git a/sql/pom.xml b/spark/pom.xml
similarity index 98%
rename from sql/pom.xml
rename to spark/pom.xml
index 4b75eba55..242316c23 100644
--- a/sql/pom.xml
+++ b/spark/pom.xml
@@ -25,7 +25,7 @@
         <version>1.5.0-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
-	<artifactId>sedona-sql-parent-${spark.compat.version}_${scala.compat.version}</artifactId>
+	<artifactId>sedona-spark-parent-${spark.compat.version}_${scala.compat.version}</artifactId>
 
 	<name>${project.groupId}:${project.artifactId}</name>
 	<description>A cluster computing system for processing large-scale spatial data: Parent module for SQL API.</description>
diff --git a/sql/spark-3.0/.gitignore b/spark/spark-3.0/.gitignore
similarity index 100%
rename from sql/spark-3.0/.gitignore
rename to spark/spark-3.0/.gitignore
diff --git a/sql/spark-3.0/pom.xml b/spark/spark-3.0/pom.xml
similarity index 91%
rename from sql/spark-3.0/pom.xml
rename to spark/spark-3.0/pom.xml
index 7ea8d946d..bd5de694c 100644
--- a/sql/spark-3.0/pom.xml
+++ b/spark/spark-3.0/pom.xml
@@ -21,11 +21,11 @@
 	<modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.sedona</groupId>
-        <artifactId>sedona-sql-parent-${spark.compat.version}_${scala.compat.version}</artifactId>
+        <artifactId>sedona-spark-parent-${spark.compat.version}_${scala.compat.version}</artifactId>
         <version>1.5.0-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
-	<artifactId>sedona-sql-3.0_${scala.compat.version}</artifactId>
+	<artifactId>sedona-spark-3.0_${scala.compat.version}</artifactId>
 
 	<name>${project.groupId}:${project.artifactId}</name>
 	<description>A cluster computing system for processing large-scale spatial data: SQL API for Spark 3.0 - 3.3.</description>
@@ -50,12 +50,7 @@
         </dependency>
         <dependency>
             <groupId>org.apache.sedona</groupId>
-            <artifactId>sedona-core-${spark.compat.version}_${scala.compat.version}</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.sedona</groupId>
-            <artifactId>sedona-sql-common-${spark.compat.version}_${scala.compat.version}</artifactId>
+            <artifactId>sedona-spark-common-${spark.compat.version}_${scala.compat.version}</artifactId>
             <version>${project.version}</version>
         </dependency>
 
diff --git a/sql/spark-3.0/src/main/resources/META-INF/services/org.apache.spark.sql.sources.DataSourceRegister b/spark/spark-3.0/src/main/resources/META-INF/services/org.apache.spark.sql.sources.DataSourceRegister
similarity index 100%
rename from sql/spark-3.0/src/main/resources/META-INF/services/org.apache.spark.sql.sources.DataSourceRegister
rename to spark/spark-3.0/src/main/resources/META-INF/services/org.apache.spark.sql.sources.DataSourceRegister
diff --git a/sql/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoDataSourceUtils.scala b/spark/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoDataSourceUtils.scala
similarity index 100%
rename from sql/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoDataSourceUtils.scala
rename to spark/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoDataSourceUtils.scala
diff --git a/sql/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoDateTimeUtils.scala b/spark/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoDateTimeUtils.scala
similarity index 100%
rename from sql/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoDateTimeUtils.scala
rename to spark/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoDateTimeUtils.scala
diff --git a/sql/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetFileFormat.scala b/spark/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetFileFormat.scala
similarity index 100%
rename from sql/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetFileFormat.scala
rename to spark/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetFileFormat.scala
diff --git a/sql/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetFilters.scala b/spark/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetFilters.scala
similarity index 100%
rename from sql/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetFilters.scala
rename to spark/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetFilters.scala
diff --git a/sql/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetReadSupport.scala b/spark/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetReadSupport.scala
similarity index 100%
rename from sql/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetReadSupport.scala
rename to spark/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetReadSupport.scala
diff --git a/sql/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetRecordMaterializer.scala b/spark/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetRecordMaterializer.scala
similarity index 100%
rename from sql/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetRecordMaterializer.scala
rename to spark/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetRecordMaterializer.scala
diff --git a/sql/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetRowConverter.scala b/spark/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetRowConverter.scala
similarity index 100%
rename from sql/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetRowConverter.scala
rename to spark/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetRowConverter.scala
diff --git a/sql/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetSchemaConverter.scala b/spark/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetSchemaConverter.scala
similarity index 100%
rename from sql/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetSchemaConverter.scala
rename to spark/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetSchemaConverter.scala
diff --git a/sql/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetUtils.scala b/spark/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetUtils.scala
similarity index 100%
rename from sql/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetUtils.scala
rename to spark/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetUtils.scala
diff --git a/sql/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetWriteSupport.scala b/spark/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetWriteSupport.scala
similarity index 100%
rename from sql/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetWriteSupport.scala
rename to spark/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetWriteSupport.scala
diff --git a/sql/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoSchemaMergeUtils.scala b/spark/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoSchemaMergeUtils.scala
similarity index 100%
rename from sql/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoSchemaMergeUtils.scala
rename to spark/spark-3.0/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoSchemaMergeUtils.scala
diff --git a/sql/common/src/test/resources/log4j2.properties b/spark/spark-3.0/src/test/resources/log4j2.properties
similarity index 100%
rename from sql/common/src/test/resources/log4j2.properties
rename to spark/spark-3.0/src/test/resources/log4j2.properties
diff --git a/sql/spark-3.0/src/test/scala/org/apache/sedona/sql/GeoParquetSpatialFilterPushDownSuite.scala b/spark/spark-3.0/src/test/scala/org/apache/sedona/sql/GeoParquetSpatialFilterPushDownSuite.scala
similarity index 100%
rename from sql/spark-3.0/src/test/scala/org/apache/sedona/sql/GeoParquetSpatialFilterPushDownSuite.scala
rename to spark/spark-3.0/src/test/scala/org/apache/sedona/sql/GeoParquetSpatialFilterPushDownSuite.scala
diff --git a/sql/spark-3.0/src/test/scala/org/apache/sedona/sql/TestBaseScala.scala b/spark/spark-3.0/src/test/scala/org/apache/sedona/sql/TestBaseScala.scala
similarity index 95%
rename from sql/spark-3.0/src/test/scala/org/apache/sedona/sql/TestBaseScala.scala
rename to spark/spark-3.0/src/test/scala/org/apache/sedona/sql/TestBaseScala.scala
index 40338d096..93b8755a8 100644
--- a/sql/spark-3.0/src/test/scala/org/apache/sedona/sql/TestBaseScala.scala
+++ b/spark/spark-3.0/src/test/scala/org/apache/sedona/sql/TestBaseScala.scala
@@ -38,7 +38,7 @@ trait TestBaseScala extends FunSpec with BeforeAndAfterAll {
     .config("sedona.join.autoBroadcastJoinThreshold", "-1")
     .getOrCreate()
 
-  val resourceFolder = System.getProperty("user.dir") + "/../../core/src/test/resources/"
+  val resourceFolder = System.getProperty("user.dir") + "/../common/src/test/resources/"
 
   override def beforeAll(): Unit = {
     SedonaContext.create(sparkSession)
diff --git a/sql/spark-3.0/src/test/scala/org/apache/sedona/sql/geoparquetIOTests.scala b/spark/spark-3.0/src/test/scala/org/apache/sedona/sql/geoparquetIOTests.scala
similarity index 100%
rename from sql/spark-3.0/src/test/scala/org/apache/sedona/sql/geoparquetIOTests.scala
rename to spark/spark-3.0/src/test/scala/org/apache/sedona/sql/geoparquetIOTests.scala
diff --git a/sql/spark-3.4/.gitignore b/spark/spark-3.4/.gitignore
similarity index 100%
rename from sql/spark-3.4/.gitignore
rename to spark/spark-3.4/.gitignore
diff --git a/sql/spark-3.4/pom.xml b/spark/spark-3.4/pom.xml
similarity index 91%
rename from sql/spark-3.4/pom.xml
rename to spark/spark-3.4/pom.xml
index ddfa21b6e..2011f875f 100644
--- a/sql/spark-3.4/pom.xml
+++ b/spark/spark-3.4/pom.xml
@@ -21,11 +21,11 @@
 	<modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.sedona</groupId>
-        <artifactId>sedona-sql-parent-${spark.compat.version}_${scala.compat.version}</artifactId>
+        <artifactId>sedona-spark-parent-${spark.compat.version}_${scala.compat.version}</artifactId>
         <version>1.5.0-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
-	<artifactId>sedona-sql-3.4_${scala.compat.version}</artifactId>
+	<artifactId>sedona-spark-3.4_${scala.compat.version}</artifactId>
 
 	<name>${project.groupId}:${project.artifactId}</name>
 	<description>A cluster computing system for processing large-scale spatial data: SQL API for Spark 3.4.</description>
@@ -50,12 +50,7 @@
         </dependency>
         <dependency>
             <groupId>org.apache.sedona</groupId>
-            <artifactId>sedona-core-${spark.compat.version}_${scala.compat.version}</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.sedona</groupId>
-            <artifactId>sedona-sql-common-${spark.compat.version}_${scala.compat.version}</artifactId>
+            <artifactId>sedona-spark-common-${spark.compat.version}_${scala.compat.version}</artifactId>
             <version>${project.version}</version>
         </dependency>
 
diff --git a/sql/spark-3.4/src/main/resources/META-INF/services/org.apache.spark.sql.sources.DataSourceRegister b/spark/spark-3.4/src/main/resources/META-INF/services/org.apache.spark.sql.sources.DataSourceRegister
similarity index 100%
rename from sql/spark-3.4/src/main/resources/META-INF/services/org.apache.spark.sql.sources.DataSourceRegister
rename to spark/spark-3.4/src/main/resources/META-INF/services/org.apache.spark.sql.sources.DataSourceRegister
diff --git a/sql/spark-3.4/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoDataSourceUtils.scala b/spark/spark-3.4/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoDataSourceUtils.scala
similarity index 100%
rename from sql/spark-3.4/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoDataSourceUtils.scala
rename to spark/spark-3.4/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoDataSourceUtils.scala
diff --git a/sql/spark-3.4/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetFileFormat.scala b/spark/spark-3.4/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetFileFormat.scala
similarity index 100%
rename from sql/spark-3.4/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetFileFormat.scala
rename to spark/spark-3.4/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetFileFormat.scala
diff --git a/sql/spark-3.4/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetReadSupport.scala b/spark/spark-3.4/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetReadSupport.scala
similarity index 100%
rename from sql/spark-3.4/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetReadSupport.scala
rename to spark/spark-3.4/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetReadSupport.scala
diff --git a/sql/spark-3.4/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetRecordMaterializer.scala b/spark/spark-3.4/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetRecordMaterializer.scala
similarity index 100%
rename from sql/spark-3.4/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetRecordMaterializer.scala
rename to spark/spark-3.4/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetRecordMaterializer.scala
diff --git a/sql/spark-3.4/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetRowConverter.scala b/spark/spark-3.4/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetRowConverter.scala
similarity index 100%
rename from sql/spark-3.4/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetRowConverter.scala
rename to spark/spark-3.4/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetRowConverter.scala
diff --git a/sql/spark-3.4/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetSchemaConverter.scala b/spark/spark-3.4/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetSchemaConverter.scala
similarity index 100%
rename from sql/spark-3.4/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetSchemaConverter.scala
rename to spark/spark-3.4/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetSchemaConverter.scala
diff --git a/sql/spark-3.4/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetUtils.scala b/spark/spark-3.4/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetUtils.scala
similarity index 100%
rename from sql/spark-3.4/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetUtils.scala
rename to spark/spark-3.4/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetUtils.scala
diff --git a/sql/spark-3.4/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetWriteSupport.scala b/spark/spark-3.4/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetWriteSupport.scala
similarity index 100%
rename from sql/spark-3.4/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetWriteSupport.scala
rename to spark/spark-3.4/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/GeoParquetWriteSupport.scala
diff --git a/sql/spark-3.0/src/test/resources/log4j2.properties b/spark/spark-3.4/src/test/resources/log4j2.properties
similarity index 100%
rename from sql/spark-3.0/src/test/resources/log4j2.properties
rename to spark/spark-3.4/src/test/resources/log4j2.properties
diff --git a/sql/spark-3.4/src/test/scala/org/apache/sedona/sql/GeoParquetSpatialFilterPushDownSuite.scala b/spark/spark-3.4/src/test/scala/org/apache/sedona/sql/GeoParquetSpatialFilterPushDownSuite.scala
similarity index 100%
rename from sql/spark-3.4/src/test/scala/org/apache/sedona/sql/GeoParquetSpatialFilterPushDownSuite.scala
rename to spark/spark-3.4/src/test/scala/org/apache/sedona/sql/GeoParquetSpatialFilterPushDownSuite.scala
diff --git a/sql/spark-3.4/src/test/scala/org/apache/sedona/sql/TestBaseScala.scala b/spark/spark-3.4/src/test/scala/org/apache/sedona/sql/TestBaseScala.scala
similarity index 95%
rename from sql/spark-3.4/src/test/scala/org/apache/sedona/sql/TestBaseScala.scala
rename to spark/spark-3.4/src/test/scala/org/apache/sedona/sql/TestBaseScala.scala
index 40338d096..93b8755a8 100644
--- a/sql/spark-3.4/src/test/scala/org/apache/sedona/sql/TestBaseScala.scala
+++ b/spark/spark-3.4/src/test/scala/org/apache/sedona/sql/TestBaseScala.scala
@@ -38,7 +38,7 @@ trait TestBaseScala extends FunSpec with BeforeAndAfterAll {
     .config("sedona.join.autoBroadcastJoinThreshold", "-1")
     .getOrCreate()
 
-  val resourceFolder = System.getProperty("user.dir") + "/../../core/src/test/resources/"
+  val resourceFolder = System.getProperty("user.dir") + "/../common/src/test/resources/"
 
   override def beforeAll(): Unit = {
     SedonaContext.create(sparkSession)
diff --git a/sql/spark-3.4/src/test/scala/org/apache/sedona/sql/geoparquetIOTests.scala b/spark/spark-3.4/src/test/scala/org/apache/sedona/sql/geoparquetIOTests.scala
similarity index 100%
rename from sql/spark-3.4/src/test/scala/org/apache/sedona/sql/geoparquetIOTests.scala
rename to spark/spark-3.4/src/test/scala/org/apache/sedona/sql/geoparquetIOTests.scala
diff --git a/sql/common/pom.xml b/sql/common/pom.xml
deleted file mode 100644
index f4d8713be..000000000
--- a/sql/common/pom.xml
+++ /dev/null
@@ -1,153 +0,0 @@
-<!--
-  ~ 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.
-  -->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.apache.sedona</groupId>
-        <artifactId>sedona-sql-parent-${spark.compat.version}_${scala.compat.version}</artifactId>
-        <version>1.5.0-SNAPSHOT</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-	<artifactId>sedona-sql-common-${spark.compat.version}_${scala.compat.version}</artifactId>
-
-	<name>${project.groupId}:${project.artifactId}</name>
-	<description>A cluster computing system for processing large-scale spatial data: Common SQL API.</description>
-    <url>http://sedona.apache.org/</url>
-	<packaging>jar</packaging>
-
-    <properties>
-        <maven.deploy.skip>false</maven.deploy.skip>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.sedona</groupId>
-            <artifactId>sedona-common</artifactId>
-            <version>${project.version}</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>com.fasterxml.jackson.core</groupId>
-                    <artifactId>*</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.sedona</groupId>
-            <artifactId>sedona-core-${spark.compat.version}_${scala.compat.version}</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.spark</groupId>
-            <artifactId>spark-core_${scala.compat.version}</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.spark</groupId>
-            <artifactId>spark-sql_${scala.compat.version}</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.hadoop</groupId>
-            <artifactId>hadoop-client</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.logging.log4j</groupId>
-            <artifactId>log4j-1.2-api</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.geotools</groupId>
-            <artifactId>gt-main</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.geotools</groupId>
-            <artifactId>gt-referencing</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.geotools</groupId>
-            <artifactId>gt-epsg-hsql</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.geotools</groupId>
-            <artifactId>gt-geotiff</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.geotools</groupId>
-            <artifactId>gt-coverage</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.geotools</groupId>
-            <artifactId>gt-arcgrid</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.locationtech.jts</groupId>
-            <artifactId>jts-core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.wololo</groupId>
-            <artifactId>jts2geojson</artifactId>
-            <exclusions>
-                <exclusion>
-                    <groupId>com.fasterxml.jackson.core</groupId>
-                    <artifactId>*</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>org.scala-lang</groupId>
-            <artifactId>scala-library</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.scala-lang.modules</groupId>
-            <artifactId>scala-collection-compat_${scala.compat.version}</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.scalatest</groupId>
-            <artifactId>scalatest_${scala.compat.version}</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.mockito</groupId>
-            <artifactId>mockito-inline</artifactId>
-        </dependency>
-    </dependencies>
-	<build>
-        <sourceDirectory>src/main/scala</sourceDirectory>
-        <plugins>
-            <plugin>
-                <groupId>net.alchim31.maven</groupId>
-                <artifactId>scala-maven-plugin</artifactId>
-                <executions>
-                   <execution>
-                        <id>attach-javadocs</id>
-                        <configuration>
-                            <doctitle>sedona-sql documentation</doctitle>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.scalatest</groupId>
-                <artifactId>scalatest-maven-plugin</artifactId>
-            </plugin>
-            <plugin>
-                <groupId>org.scalastyle</groupId>
-                <artifactId>scalastyle-maven-plugin</artifactId>
-            </plugin>
-        </plugins>
-	</build>
-</project>
diff --git a/sql/common/src/.gitignore b/sql/common/src/.gitignore
deleted file mode 100644
index 5509140f2..000000000
--- a/sql/common/src/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.DS_Store
diff --git a/sql/common/src/main/.gitignore b/sql/common/src/main/.gitignore
deleted file mode 100644
index 5509140f2..000000000
--- a/sql/common/src/main/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.DS_Store
diff --git a/sql/common/src/test/.gitignore b/sql/common/src/test/.gitignore
deleted file mode 100644
index 5509140f2..000000000
--- a/sql/common/src/test/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.DS_Store
diff --git a/sql/spark-3.4/src/test/resources/log4j2.properties b/sql/spark-3.4/src/test/resources/log4j2.properties
deleted file mode 100644
index 5f8985946..000000000
--- a/sql/spark-3.4/src/test/resources/log4j2.properties
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-# 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.
-#
-
-# Set everything to be logged to the file target/unit-tests.log
-rootLogger.level = info
-rootLogger.appenderRef.file.ref = File
-
-appender.file.type = File
-appender.file.name = File
-appender.file.fileName = target/unit-tests.log
-appender.file.append = true
-appender.file.layout.type = PatternLayout
-appender.file.layout.pattern = %d{yy/MM/dd HH:mm:ss.SSS} %t %p %c{1}: %m%n%ex
-
-# Ignore messages below warning level from Jetty, because it's a bit verbose
-logger.jetty.name = org.sparkproject.jetty
-logger.jetty.level = warn
diff --git a/viz/pom.xml b/viz/pom.xml
index 2ea8c3c74..8d1ae9475 100644
--- a/viz/pom.xml
+++ b/viz/pom.xml
@@ -50,12 +50,7 @@
         </dependency>
         <dependency>
             <groupId>org.apache.sedona</groupId>
-            <artifactId>sedona-core-${spark.compat.version}_${scala.compat.version}</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.sedona</groupId>
-            <artifactId>sedona-sql-${spark.compat.version}_${scala.compat.version}</artifactId>
+            <artifactId>sedona-spark-${spark.compat.version}_${scala.compat.version}</artifactId>
             <version>${project.version}</version>
         </dependency>
          <dependency>
diff --git a/viz/src/main/java/org/apache/sedona/viz/showcase/Example.java b/viz/src/main/java/org/apache/sedona/viz/showcase/Example.java
index 11cdec33e..8b152def2 100644
--- a/viz/src/main/java/org/apache/sedona/viz/showcase/Example.java
+++ b/viz/src/main/java/org/apache/sedona/viz/showcase/Example.java
@@ -40,7 +40,6 @@ import org.apache.sedona.viz.utils.ImageType;
 import org.apache.spark.SparkConf;
 import org.apache.spark.api.java.JavaPairRDD;
 import org.apache.spark.api.java.JavaSparkContext;
-import org.apache.spark.storage.StorageLevel;
 import org.locationtech.jts.geom.Envelope;
 import org.locationtech.jts.geom.Polygon;
 
@@ -377,7 +376,7 @@ public class Example
         Logger.getLogger("akka").setLevel(Level.WARN);
         prop = new Properties();
 
-        String resourcePath = "src/test/resources/";
+        String resourcePath = "/../spark/common/src/test/resources/";
         String demoOutputPath = "target/demo";
         FileInputStream ConfFile = new FileInputStream(resourcePath + "babylon.point.properties");
         prop.load(ConfFile);
@@ -416,14 +415,14 @@ public class Example
 
         USMainLandBoundary = new Envelope(-126.790180, -64.630926, 24.863836, 50.000);
 
-        earthdataInputLocation = System.getProperty("user.dir") + "/src/test/resources/modis/modis.csv";
+        earthdataInputLocation = System.getProperty("user.dir") + "/../spark/common/src/test/resources/modis/modis.csv";
         earthdataNumPartitions = 5;
         HDFIncrement = 5;
         HDFOffset = 2;
         HDFRootGroupName = "MOD_Swath_LST";
         HDFDataVariableName = "LST";
         HDFswitchXY = true;
-        urlPrefix = System.getProperty("user.dir") + "/src/test/resources/modis/";
+        urlPrefix = System.getProperty("user.dir") + "/../spark/common/src/test/resources/modis/";
 
         if (buildScatterPlot(scatterPlotOutputPath) && buildHeatMap(heatMapOutputPath)
                 && buildChoroplethMap(choroplethMapOutputPath) && parallelFilterRenderStitch(parallelFilterRenderStitchOutputPath + "-stitched")
diff --git a/viz/src/main/scala/org/apache/sedona/viz/showcase/ScalaExample.scala b/viz/src/main/scala/org/apache/sedona/viz/showcase/ScalaExample.scala
index f88bf6af9..62d763c52 100644
--- a/viz/src/main/scala/org/apache/sedona/viz/showcase/ScalaExample.scala
+++ b/viz/src/main/scala/org/apache/sedona/viz/showcase/ScalaExample.scala
@@ -18,10 +18,6 @@
  */
 package org.apache.sedona.viz.showcase
 
-import java.awt.Color // scalastyle:ignore illegal.imports
-import java.io.FileInputStream
-import java.util.Properties
-
 import org.apache.log4j.{Level, Logger}
 import org.apache.sedona.common.enums.FileDataSplitter
 import org.apache.sedona.core.enums.{GridType, IndexType}
@@ -31,10 +27,13 @@ import org.apache.sedona.core.spatialRDD.{PointRDD, PolygonRDD, RectangleRDD}
 import org.apache.sedona.viz.`extension`.visualizationEffect.{ChoroplethMap, HeatMap, ScatterPlot}
 import org.apache.sedona.viz.core.{ImageGenerator, RasterOverlayOperator}
 import org.apache.sedona.viz.utils.{ColorizeOption, ImageType}
-import org.apache.spark.storage.StorageLevel
 import org.apache.spark.{SparkConf, SparkContext}
 import org.locationtech.jts.geom.Envelope
 
+import java.awt.Color
+import java.io.FileInputStream
+import java.util.Properties
+
 
 /**
   * The Class ScalaExample.
@@ -45,7 +44,7 @@ object ScalaExample extends App {
   Logger.getLogger("org").setLevel(Level.WARN)
   Logger.getLogger("akka").setLevel(Level.WARN)
   val prop = new Properties()
-  val resourcePath = "src/test/resources/"
+  val resourcePath = "/../spark/common/src/test/resources/"
   val demoOutputPath = "target/demo"
   val scatterPlotOutputPath = System.getProperty("user.dir") + "/" + demoOutputPath + "/scatterplot"
   prop.load(ConfFile)
@@ -76,7 +75,7 @@ object ScalaExample extends App {
   val LineStringSplitter = FileDataSplitter.getFileDataSplitter(prop.getProperty("splitter"))
   val LineStringNumPartitions = prop.getProperty("numPartitions").toInt
   val USMainLandBoundary = new Envelope(-126.790180, -64.630926, 24.863836, 50.000)
-  val earthdataInputLocation = System.getProperty("user.dir") + "/src/test/resources/modis/modis.csv"
+  val earthdataInputLocation = System.getProperty("user.dir") + "/../spark/common/src/test/resources/modis/modis.csv"
   val earthdataNumPartitions = 5
   val HDFIncrement = 5
   val HDFOffset = 2
@@ -84,7 +83,7 @@ object ScalaExample extends App {
   val HDFDataVariableName = "LST"
   val HDFDataVariableList = Array("LST", "QC", "Error_LST", "Emis_31", "Emis_32")
   val HDFswitchXY = true
-  val urlPrefix = System.getProperty("user.dir") + "/src/test/resources/modis/"
+  val urlPrefix = System.getProperty("user.dir") + "/../spark/common/src/test/resources/modis/"
   var ConfFile = new FileInputStream(resourcePath + "babylon.point.properties")
 
   if (buildScatterPlot(scatterPlotOutputPath) && buildHeatMap(heatMapOutputPath)
diff --git a/viz/src/test/java/org/apache/sedona/viz/ChoroplethmapTest.java b/viz/src/test/java/org/apache/sedona/viz/ChoroplethmapTest.java
index ab9326426..20563d2ae 100644
--- a/viz/src/test/java/org/apache/sedona/viz/ChoroplethmapTest.java
+++ b/viz/src/test/java/org/apache/sedona/viz/ChoroplethmapTest.java
@@ -30,7 +30,6 @@ import org.apache.sedona.viz.extension.visualizationEffect.ChoroplethMap;
 import org.apache.sedona.viz.extension.visualizationEffect.ScatterPlot;
 import org.apache.sedona.viz.utils.ImageType;
 import org.apache.spark.api.java.JavaPairRDD;
-import org.apache.spark.storage.StorageLevel;
 import org.junit.Test;
 import org.locationtech.jts.geom.Polygon;
 
diff --git a/viz/src/test/java/org/apache/sedona/viz/HeatmapTest.java b/viz/src/test/java/org/apache/sedona/viz/HeatmapTest.java
index cc540b38f..1149ca339 100644
--- a/viz/src/test/java/org/apache/sedona/viz/HeatmapTest.java
+++ b/viz/src/test/java/org/apache/sedona/viz/HeatmapTest.java
@@ -26,7 +26,6 @@ import org.apache.sedona.viz.core.ImageGenerator;
 import org.apache.sedona.viz.core.ImageStitcher;
 import org.apache.sedona.viz.extension.visualizationEffect.HeatMap;
 import org.apache.sedona.viz.utils.ImageType;
-import org.apache.spark.storage.StorageLevel;
 import org.junit.Test;
 
 // TODO: Auto-generated Javadoc
diff --git a/viz/src/test/java/org/apache/sedona/viz/ParallelVisualizationTest.java b/viz/src/test/java/org/apache/sedona/viz/ParallelVisualizationTest.java
index 1892279ca..b703fbc81 100644
--- a/viz/src/test/java/org/apache/sedona/viz/ParallelVisualizationTest.java
+++ b/viz/src/test/java/org/apache/sedona/viz/ParallelVisualizationTest.java
@@ -26,7 +26,6 @@ import org.apache.sedona.viz.core.ImageGenerator;
 import org.apache.sedona.viz.core.ImageStitcher;
 import org.apache.sedona.viz.extension.visualizationEffect.HeatMap;
 import org.apache.sedona.viz.utils.ImageType;
-import org.apache.spark.storage.StorageLevel;
 import org.junit.Test;
 
 // TODO: Auto-generated Javadoc
diff --git a/viz/src/test/java/org/apache/sedona/viz/ScatterplotTest.java b/viz/src/test/java/org/apache/sedona/viz/ScatterplotTest.java
index 2bf9179c0..43ef72888 100644
--- a/viz/src/test/java/org/apache/sedona/viz/ScatterplotTest.java
+++ b/viz/src/test/java/org/apache/sedona/viz/ScatterplotTest.java
@@ -28,7 +28,6 @@ import org.apache.sedona.viz.extension.visualizationEffect.ScatterPlot;
 import org.apache.sedona.viz.utils.ColorizeOption;
 import org.apache.sedona.viz.utils.ImageType;
 import org.apache.sedona.viz.utils.RasterizationUtils;
-import org.apache.spark.storage.StorageLevel;
 import org.junit.Test;
 import scala.Tuple2;
 
diff --git a/viz/src/test/java/org/apache/sedona/viz/VizTestBase.java b/viz/src/test/java/org/apache/sedona/viz/VizTestBase.java
index 2a96610d4..923b2a114 100644
--- a/viz/src/test/java/org/apache/sedona/viz/VizTestBase.java
+++ b/viz/src/test/java/org/apache/sedona/viz/VizTestBase.java
@@ -147,7 +147,7 @@ public class VizTestBase
         Logger.getLogger("org").setLevel(Level.WARN);
         Logger.getLogger("akka").setLevel(Level.WARN);
 
-        String resourceFolder = System.getProperty("user.dir") + "/../core/src/test/resources/";
+        String resourceFolder = System.getProperty("user.dir") + "/../spark/common/src/test/resources/";
 
         prop = new Properties();
 
diff --git a/viz/src/test/scala/org/apache/sedona/viz/rdd/scalaTest.scala b/viz/src/test/scala/org/apache/sedona/viz/rdd/scalaTest.scala
index 7d40e13f3..bc0e65641 100644
--- a/viz/src/test/scala/org/apache/sedona/viz/rdd/scalaTest.scala
+++ b/viz/src/test/scala/org/apache/sedona/viz/rdd/scalaTest.scala
@@ -45,7 +45,7 @@ class scalaTest extends FunSpec with BeforeAndAfterAll{
   Logger.getLogger("org").setLevel(Level.WARN)
   Logger.getLogger("akka").setLevel(Level.WARN)
   val prop = new Properties()
-  val resourceFolder = System.getProperty("user.dir") + "/../core/src/test/resources/"
+  val resourceFolder = System.getProperty("user.dir") + "/../spark/common/src/test/resources/"
   val demoOutputPath = "target/scala/demo"
   var ConfFile = new FileInputStream(resourceFolder + "babylon.point.properties")
   prop.load(ConfFile)
diff --git a/viz/src/test/scala/org/apache/sedona/viz/sql/TestBaseScala.scala b/viz/src/test/scala/org/apache/sedona/viz/sql/TestBaseScala.scala
index 4b878c256..2967413f3 100644
--- a/viz/src/test/scala/org/apache/sedona/viz/sql/TestBaseScala.scala
+++ b/viz/src/test/scala/org/apache/sedona/viz/sql/TestBaseScala.scala
@@ -31,7 +31,7 @@ trait TestBaseScala extends FunSpec with BeforeAndAfterAll{
   Logger.getLogger("org.datasyslab").setLevel(Level.WARN)
 
   var spark:SparkSession = _
-  val resourceFolder = System.getProperty("user.dir") + "/../core/src/test/resources/"
+  val resourceFolder = System.getProperty("user.dir") + "/../spark/common/src/test/resources/"
 
   val polygonInputLocationWkt = resourceFolder + "county_small.tsv"
   val polygonInputLocation = resourceFolder + "primaryroads-polygon.csv"