def main(port: int):
    initialize_logging()
    register_input_converter(DateTimeConverter())
    gateway = ClientServer(java_parameters=JavaParameters(eager_load=False,
                                                          auto_convert=True,
                                                          auto_field=True),
                           python_parameters=PythonParameters(port=port,
                                                              eager_load=True),
                           python_server_entry_point=Runner())
    register_output_converter(
        proto.REFERENCE_TYPE,
        lambda target_id, gateway_client: convert_reference_type(
            target_id, gateway_client, gateway))
예제 #2
0

class DatetimeConverter(object):
    def can_convert(self, obj):
        return isinstance(obj, datetime.datetime)

    def convert(self, obj, gateway_client):
        Timestamp = JavaClass("java.sql.Timestamp", gateway_client)
        seconds = calendar.timegm(obj.utctimetuple()) if obj.tzinfo else time.mktime(obj.timetuple())
        t = Timestamp(int(seconds) * 1000)
        t.setNanos(obj.microsecond * 1000)
        return t


# datetime is a subclass of date, we should register DatetimeConverter first
register_input_converter(DatetimeConverter())
register_input_converter(DateConverter())


def _test():
    import doctest
    from pyspark.context import SparkContext
    from pyspark.sql import SQLContext

    globs = globals()
    sc = SparkContext("local[4]", "PythonTest")
    globs["sc"] = sc
    globs["sqlContext"] = SQLContext(sc)
    (failure_count, test_count) = doctest.testmod(globs=globs, optionflags=doctest.ELLIPSIS)
    globs["sc"].stop()
    if failure_count:
예제 #3
0
        Date = JavaClass("java.sql.Date", gateway_client)
        return Date.valueOf(obj.strftime("%Y-%m-%d"))


class DatetimeConverter(object):
    def can_convert(self, obj):
        return isinstance(obj, datetime.datetime)

    def convert(self, obj, gateway_client):
        Timestamp = JavaClass("java.sql.Timestamp", gateway_client)
        return Timestamp(
            int(time.mktime(obj.timetuple())) * 1000 + obj.microsecond // 1000)


# datetime is a subclass of date, we should register DatetimeConverter first
register_input_converter(DatetimeConverter())
register_input_converter(DateConverter())


def _test():
    import doctest
    from pyspark.context import SparkContext
    # let doctest run in pyspark.sql.types, so DataTypes can be picklable
    import pyspark.sql.types
    from pyspark.sql import Row, SQLContext
    from pyspark.sql.tests import ExamplePoint, ExamplePointUDT
    globs = pyspark.sql.types.__dict__.copy()
    sc = SparkContext('local[4]', 'PythonTest')
    globs['sc'] = sc
    globs['sqlContext'] = SQLContext(sc)
    globs['ExamplePoint'] = ExamplePoint
예제 #4
0
            java_list.add(element)
        return java_list


class MapConverter(object):
    def can_convert(self, object):
        return hasattr2(object, "keys") and hasattr2(object, "__getitem__")

    def convert(self, object, gateway_client):
        HashMap = JavaClass("java.util.HashMap", gateway_client)
        java_map = HashMap()
        for key in object.keys():
            java_map[key] = object[key]
        return java_map

register_input_converter(SetConverter())
register_input_converter(MapConverter())
register_input_converter(ListConverter())

register_output_converter(
    proto.MAP_TYPE, lambda target_id, gateway_client:
    JavaMap(target_id, gateway_client))
register_output_converter(
    proto.LIST_TYPE, lambda target_id, gateway_client:
    JavaList(target_id, gateway_client))
register_output_converter(
    proto.ARRAY_TYPE, lambda target_id, gateway_client:
    JavaArray(target_id, gateway_client))
register_output_converter(
    proto.SET_TYPE, lambda target_id, gateway_client:
    JavaSet(target_id, gateway_client))
예제 #5
0
        if obj.time_resolution:
            scala_time_resolution = str(obj.time_resolution)
        else:
            scala_time_resolution = None

        return ScalaTemporalStrategy.apply(obj.num_partitions, obj.bits,
                                           scala_time_unit,
                                           scala_time_resolution)


class SourceInfoConverter(object):
    def can_convert(self, object):
        return isinstance(object, SourceInfo)

    def convert(self, obj, gateway_client):
        ScalaSourceInfo = JavaClass("geopyspark.geotrellis.vlm.SourceInfo",
                                    gateway_client)

        return ScalaSourceInfo.apply(obj.source, obj.source_to_target_band)


register_input_converter(CellTypeConverter(), prepend=True)
register_input_converter(RasterizerOptionsConverter(), prepend=True)
register_input_converter(LayoutTypeConverter(), prepend=True)
register_input_converter(ResampleMethodConverter(), prepend=True)
register_input_converter(LayoutDefinitionConverter(), prepend=True)
register_input_converter(HashPartitionStrategyConverter(), prepend=True)
register_input_converter(SpatialPartitionStrategyConverter(), prepend=True)
register_input_converter(SpaceTimePartitionStrategyConverter(), prepend=True)
register_input_converter(SourceInfoConverter(), prepend=True)
예제 #6
0
        return java_list


class MapConverter(object):
    def can_convert(self, object):
        return hasattr2(object, "keys") and hasattr2(object, "__getitem__")

    def convert(self, object, gateway_client):
        HashMap = JavaClass("java.util.HashMap", gateway_client)
        java_map = HashMap()
        for key in object.keys():
            java_map[key] = object[key]
        return java_map


register_input_converter(SetConverter())
register_input_converter(MapConverter())
register_input_converter(ListConverter())

register_output_converter(
    proto.MAP_TYPE,
    lambda target_id, gateway_client: JavaMap(target_id, gateway_client))
register_output_converter(
    proto.LIST_TYPE,
    lambda target_id, gateway_client: JavaList(target_id, gateway_client))
register_output_converter(
    proto.ARRAY_TYPE,
    lambda target_id, gateway_client: JavaArray(target_id, gateway_client))
register_output_converter(
    proto.SET_TYPE,
    lambda target_id, gateway_client: JavaSet(target_id, gateway_client))
예제 #7
0
        return java_list


class MapConverter(object):
    def can_convert(self, object):
        return hasattr2(object, "keys") and hasattr2(object, "__getitem__")

    def convert(self, object, gateway_client):
        HashMap = JavaClass("java.util.HashMap", gateway_client)
        java_map = HashMap()
        for key in object.keys():
            java_map[key] = object[key]
        return java_map


register_input_converter(ListConverter(), prepend=True)
register_input_converter(SetConverter())
register_input_converter(MapConverter())

register_output_converter(
    proto.MAP_TYPE,
    lambda target_id, gateway_client: JavaMap(target_id, gateway_client))
register_output_converter(
    proto.LIST_TYPE,
    lambda target_id, gateway_client: JavaList(target_id, gateway_client))
register_output_converter(
    proto.ARRAY_TYPE,
    lambda target_id, gateway_client: JavaArray(target_id, gateway_client))
register_output_converter(
    proto.SET_TYPE,
    lambda target_id, gateway_client: JavaSet(target_id, gateway_client))
예제 #8
0
        return sample.__getattr__("MODULE$")


class LayoutDefinitionConverter:
    def can_convert(self, object):
        return isinstance(object, LayoutDefinition)

    def convert(self, obj, gateway_client):
        python_extent = obj.extent
        python_tile_layout = obj.tileLayout

        ScalaExtent = JavaClass("geotrellis.vector.Extent", gateway_client)
        ScalaTileLayout = JavaClass("geotrellis.raster.TileLayout", gateway_client)
        ScalaLayoutDefinition = JavaClass("geotrellis.spark.tiling.LayoutDefinition", gateway_client)

        extent = ScalaExtent(python_extent.xmin, python_extent.ymin, python_extent.xmax, python_extent.ymax)
        tile_layout = ScalaTileLayout(python_tile_layout.layoutCols,
                                      python_tile_layout.layoutRows,
                                      python_tile_layout.tileCols,
                                      python_tile_layout.tileRows)

        return ScalaLayoutDefinition(extent, tile_layout)


register_input_converter(CellTypeConverter(), prepend=True)
register_input_converter(RasterizerOptionsConverter(), prepend=True)
register_input_converter(LayoutTypeConverter(), prepend=True)
register_input_converter(ResampleMethodConverter(), prepend=True)
register_input_converter(LayoutDefinitionConverter(), prepend=True)
예제 #9
0
    """
    Register SQL extensions and py4j converters for a Spark session.

    Args:
        session: Spark session
        new_session: If ``True``, create a new Spark session using ``session.newSession()`` before registering
                     extensions. This may be necessary if you're using functions that register new
                     analysis rules. The new session has isolated UDFs, configurations, and temporary tables,
                     but shares the existing ``SparkContext`` and cached data.

    Example:
        >>> import glow
        >>> spark = glow.register(spark)
    """
    assert check_argument_types()
    sc = session._sc
    return SparkSession(
        sc,
        session._jvm.io.projectglow.Glow.register(session._jsparkSession,
                                                  new_session))


# Register input converters in idempotent fashion
glow_input_converters = [
    OneDimensionalDoubleNumpyArrayConverter,
    TwoDimensionalDoubleNumpyArrayConverter
]
for gic in glow_input_converters:
    if not any(type(pic) is gic for pic in protocol.INPUT_CONVERTER):
        register_input_converter(gic(), prepend=True)