示例#1
0
def _nonnull_coder_from_type(field_type):
  type_info = field_type.WhichOneof("type_info")
  if type_info == "atomic_type":
    if field_type.atomic_type in (schema_pb2.INT32, schema_pb2.INT64):
      return VarIntCoder()
    elif field_type.atomic_type == schema_pb2.DOUBLE:
      return FloatCoder()
    elif field_type.atomic_type == schema_pb2.STRING:
      return StrUtf8Coder()
    elif field_type.atomic_type == schema_pb2.BOOLEAN:
      return BooleanCoder()
    elif field_type.atomic_type == schema_pb2.BYTES:
      return BytesCoder()
  elif type_info == "array_type":
    return IterableCoder(_coder_from_type(field_type.array_type.element_type))
  elif type_info == "map_type":
    return MapCoder(
        _coder_from_type(field_type.map_type.key_type),
        _coder_from_type(field_type.map_type.value_type))
  elif type_info == "row_type":
    return RowCoder(field_type.row_type.schema)

  # The Java SDK supports several more types, but the coders are not yet
  # standard, and are not implemented in Python.
  raise ValueError(
      "Encountered a type that is not currently supported by RowCoder: %s" %
      field_type)
示例#2
0
    def coder_from_type(field_type):
        type_info = field_type.WhichOneof("type_info")
        if type_info == "atomic_type":
            if field_type.atomic_type in (schema_pb2.INT32, schema_pb2.INT64):
                return VarIntCoder()
            elif field_type.atomic_type == schema_pb2.DOUBLE:
                return FloatCoder()
            elif field_type.atomic_type == schema_pb2.STRING:
                return StrUtf8Coder()
        elif type_info == "array_type":
            return IterableCoder(
                RowCoder.coder_from_type(field_type.array_type.element_type))

        # The Java SDK supports several more types, but the coders are not yet
        # standard, and are not implemented in Python.
        raise ValueError(
            "Encountered a type that is not currently supported by RowCoder: %s"
            % field_type)
示例#3
0
def _nonnull_coder_from_type(field_type):
    type_info = field_type.WhichOneof("type_info")
    if type_info == "atomic_type":
        if field_type.atomic_type in (schema_pb2.INT32, schema_pb2.INT64):
            return VarIntCoder()
        elif field_type.atomic_type == schema_pb2.DOUBLE:
            return FloatCoder()
        elif field_type.atomic_type == schema_pb2.STRING:
            return StrUtf8Coder()
        elif field_type.atomic_type == schema_pb2.BOOLEAN:
            return BooleanCoder()
        elif field_type.atomic_type == schema_pb2.BYTES:
            return BytesCoder()
    elif type_info == "array_type":
        return IterableCoder(
            _coder_from_type(field_type.array_type.element_type))
    elif type_info == "map_type":
        return MapCoder(_coder_from_type(field_type.map_type.key_type),
                        _coder_from_type(field_type.map_type.value_type))
    elif type_info == "logical_type":
        # Special case for the Any logical type. Just use the default coder for an
        # unknown Python object.
        if field_type.logical_type.urn == PYTHON_ANY_URN:
            return typecoders.registry.get_coder(object)

        logical_type = LogicalType.from_runner_api(field_type.logical_type)
        return LogicalTypeCoder(
            logical_type,
            _coder_from_type(field_type.logical_type.representation))
    elif type_info == "row_type":
        return RowCoder(field_type.row_type.schema)

    # The Java SDK supports several more types, but the coders are not yet
    # standard, and are not implemented in Python.
    raise ValueError(
        "Encountered a type that is not currently supported by RowCoder: %s" %
        field_type)