sql >> Databasteknik >  >> NoSQL >> MongoDB

Så här löser du com.mongodb.spark.exceptions.MongoTypeConversionException:Kan inte casta... Java Spark

Jag hade samma problem och sampleSize löser det här problemet delvis, men löser det inte om du har mycket data.

Här är lösningen hur du kan fixa detta. Använd detta tillvägagångssätt tillsammans med ökad sampleSize (i mitt fall är det 100 000):

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. Rails Mongoid misslyckas med att autentisera - misslyckades med fel 13:inte auktoriserad för fråga på my_db.my_collection

  2. Resultaten för Mongo-projektionsfrågor varierar från testning i shell vs nodejs-applikation

  3. docker, mongorestore - FEL:rotkatalogen måste vara en dump av en enda databas

  4. MongoDB - Få senaste icke-nullfältsvärde från dokument med tidsstämpel