def DistanceJoinQueryFlat(cls, spatialRDD: SpatialRDD, queryRDD: SpatialRDD, useIndex: bool, considerBoundaryIntersection: bool) -> RDD: """ :param spatialRDD: SpatialRDD :param queryRDD: SpatialRDD :param useIndex: bool :param considerBoundaryIntersection: bool >> spatial_rdd = >> query_rdd = >> spatial_join_result = JoinQuery.DistanceJoinQueryFlat(spatial_rdd, query_rdd, True, True) >> spatial_join_result.collect() [GeoData(), GeoData()] :return: """ jvm = spatialRDD._jvm sc = spatialRDD._sc spatial_join = jvm.JoinQuery.DistanceJoinQueryFlat srdd = spatial_join( spatialRDD._srdd, queryRDD._srdd, useIndex, considerBoundaryIntersection ) serialized = JvmSedonaPythonConverter(jvm).\ translate_spatial_pair_rdd_to_python(srdd) return RDD(serialized, sc, SedonaPickler())
def SpatialKnnQuery(self, spatialRDD: SpatialRDD, originalQueryPoint: BaseGeometry, k: int, useIndex: bool): """ :param spatialRDD: spatialRDD :param originalQueryPoint: shapely.geometry.Point :param k: int :param useIndex: bool :return: pyspark.RDD """ jvm = spatialRDD._jvm jvm_geom = GeometryAdapter.create_jvm_geometry_from_base_geometry( jvm, originalQueryPoint) knn_neighbours = jvm.KNNQuery.SpatialKnnQuery(spatialRDD._srdd, jvm_geom, k, useIndex) srdd = JvmSedonaPythonConverter(jvm).translate_geometry_seq_to_python( knn_neighbours) geoms_data = [] for arr in srdd: binary_parser = BinaryParser(arr) geom = SpatialRDDParserData.deserialize(binary_parser) geoms_data.append(geom) return geoms_data
def SpatialRangeQuery(self, spatialRDD: SpatialRDD, rangeQueryWindow: BaseGeometry, considerBoundaryIntersection: bool, usingIndex: bool): """ :param spatialRDD: :param rangeQueryWindow: :param considerBoundaryIntersection: :param usingIndex: :return: """ jvm = spatialRDD._jvm sc = spatialRDD._sc jvm_geom = GeometryAdapter.create_jvm_geometry_from_base_geometry( jvm, rangeQueryWindow) srdd = jvm.\ RangeQuery.SpatialRangeQuery( spatialRDD._srdd, jvm_geom, considerBoundaryIntersection, usingIndex ) serialized = JvmSedonaPythonConverter( jvm).translate_spatial_rdd_to_python(srdd) return RDD(serialized, sc, SedonaPickler())
def rawSpatialRDD(self, spatial_rdd): if isinstance(spatial_rdd, SpatialRDD): self._srdd = spatial_rdd._srdd self._sc = spatial_rdd._sc self._jvm = spatial_rdd._jvm self._spatial_partitioned = spatial_rdd._spatial_partitioned elif isinstance(spatial_rdd, RDD): jrdd = JvmSedonaPythonConverter(self._jvm).translate_python_rdd_to_java(spatial_rdd._jrdd) self._srdd.setRawSpatialRDD(jrdd) else: self._srdd.setRawSpatialRDD(spatial_rdd)
def spatialJoin(cls, queryWindowRDD: SpatialRDD, objectRDD: SpatialRDD, joinParams: JoinParams) -> RDD: """ :param queryWindowRDD: SpatialRDD :param objectRDD: SpatialRDD :param joinParams: JoinParams :return: """ jvm = queryWindowRDD._jvm sc = queryWindowRDD._sc jvm_join_params = joinParams.jvm_instance(jvm) srdd = jvm.JoinQuery.spatialJoin(queryWindowRDD._srdd, objectRDD._srdd, jvm_join_params) serialized = JvmSedonaPythonConverter(jvm).\ translate_spatial_pair_rdd_to_python(srdd) return RDD(serialized, sc, SedonaPickler())
def DistanceJoinQuery(cls, spatialRDD: SpatialRDD, queryRDD: SpatialRDD, useIndex: bool, considerBoundaryIntersection: bool) -> RDD: """ :param spatialRDD: SpatialRDD :param queryRDD: SpatialRDD :param useIndex: bool :param considerBoundaryIntersection: bool :return: """ jvm = spatialRDD._jvm sc = spatialRDD._sc srdd = jvm.JoinQuery.DistanceJoinQuery( spatialRDD._srdd, queryRDD._srdd, useIndex, considerBoundaryIntersection ) serialized = JvmSedonaPythonConverter(jvm).\ translate_spatial_pair_rdd_with_hashset_to_python(srdd) return RDD(serialized, sc, SedonaPickler())
def SpatialJoinQueryFlat(cls, spatialRDD: SpatialRDD, queryRDD: SpatialRDD, useIndex: bool, considerBoundaryIntersection: bool) -> RDD: """ Function takes SpatialRDD and other SpatialRDD and based on two parameters - useIndex - considerBoundaryIntersection creates RDD with result of Spatial Join operation. It Returns RDD[GeoData, GeoData] :param spatialRDD: SpatialRDD :param queryRDD: SpatialRDD :param useIndex: bool :param considerBoundaryIntersection: bool :return: RDD >> spatial_join_result = JoinQuery.SpatialJoinQueryFlat( >> spatialRDD, queryRDD, useIndex, considerBoundaryIntersection >> ) >> spatial_join_result.collect() [[GeoData(Polygon, ), GeoData()], [GeoData(), GeoData()], [GeoData(), GeoData()]] """ jvm = spatialRDD._jvm sc = spatialRDD._sc spatial_join = jvm.JoinQuery.SpatialJoinQueryFlat srdd = spatial_join( spatialRDD._srdd, queryRDD._srdd, useIndex, considerBoundaryIntersection ) serialized = JvmSedonaPythonConverter(jvm).\ translate_spatial_pair_rdd_to_python(srdd) return RDD(serialized, sc, SedonaPickler())
def to_rdd(self): jvm = self.sc._jvm serialized = JvmSedonaPythonConverter(jvm). \ translate_spatial_pair_rdd_with_list_to_python(self.jsrdd) return RDD(serialized, self.sc, SedonaPickler())