sql >> Database >  >> NoSQL >> MongoDB

Hoe com.mongodb.spark.exceptions.MongoTypeConversionException op te lossen:kan niet casten... Java Spark

Ik had hetzelfde probleem en sampleSize lost dit probleem gedeeltelijk op, maar lost het niet op als u veel gegevens hebt.

Hier is de oplossing hoe u dit kunt oplossen. Gebruik deze aanpak samen met een grotere sampleSize (in mijn geval is het 100000):

def fix_schema(schema: StructType) -> StructType:
    """Fix spark schema due to inconsistent MongoDB schema collection.

    It fixes such issues like:
        Cannot cast STRING into a NullType
        Cannot cast STRING into a StructType

    :param schema: a source schema taken from a Spark DataFrame to be fixed
    """
    if isinstance(schema, StructType):
        return StructType([fix_schema(field) for field in schema.fields])
    if isinstance(schema, ArrayType):
        return ArrayType(fix_schema(schema.elementType))
    if isinstance(schema, StructField) and is_struct_oid_obj(schema):
        return StructField(name=schema.name, dataType=StringType(), nullable=schema.nullable)
    elif isinstance(schema, StructField):
        return StructField(schema.name, fix_schema(schema.dataType), schema.nullable)
    if isinstance(schema, NullType):
        return StringType()
    return schema


def is_struct_oid_obj(struct_field: StructField) -> bool:
    """
    Checks that our schema has StructType field with single oid name inside

    :param struct_field: a StructField from Spark schema
    :return bool
    """
    return (isinstance(struct_field.dataType, StructType)
            and len(struct_field.dataType.fields) == 1
            and struct_field.dataType.fields[0].name == "oid")


  1. Heroku aangepast domein werkt niet

  2. Hoe geneste $ lookup zoeken in MongoDB?

  3. Express node.js-controller wacht niet op gegevensmanipulatie en retourneert oude gegevens

  4. Array opslaan met Doctrine en MongoDB