MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak rozwiązać problem z com.mongodb.spark.exceptions.MongoTypeConversionException:nie można rzutować... Java Spark

Miałem ten sam problem i przykładowy rozmiar częściowo rozwiązuje ten problem, ale nie rozwiązuje go, jeśli masz dużo danych.

Oto rozwiązanie, jak możesz to naprawić. Użyj tego podejścia w połączeniu ze zwiększonym rozmiarem próbki (w moim przypadku to 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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongodb i mongomapper

  2. Co to jest zwracany typ db.collection.find() w mongodb

  3. MongoDB - Aktualizuj lub wstaw obiekt do tablicy

  4. Jak analizować użycie dysku przez kontener Docker

  5. Mongoose usuwanie (wyciąganie) dokumentu w tablicy, nie działa z ObjectID