MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да разрешите com.mongodb.spark.exceptions.MongoTypeConversionException:Не може да прехвърля... Java Spark

Имах същия проблем и sampleSize частично коригира този проблем, но не го решава, ако имате много данни.

Ето решението как можете да поправите това. Използвайте този подход заедно с увеличения sampleSize (в моя случай е 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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Редът на документите за връщане на Mongodb find

  2. Премахване на документи от колекция MongoDB въз основа на час на поле за дата

  3. Дизайн на схема на MongoDB - гласуване на публикации

  4. MongoDB $arrayToObject

  5. MongoCollection срещу DBCollection java