sql >> Databáze >  >> NoSQL >> MongoDB

Jak vyřešit com.mongodb.spark.exceptions.MongoTypeConversionException:Nelze přenést... Java Spark

Měl jsem stejný problém a velikost vzorku částečně řeší tento problém, ale nevyřeší jej, pokud máte hodně dat.

Zde je řešení, jak to můžete opravit. Použijte tento přístup společně s větší sampleSize (v mém případě je to 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. ServiceStack Redis, jak vrátit tabulku Lua jako seznam

  2. Efektivně určete vlastníka záznamu v hierarchii pomocí MongoDB

  3. LuaSocket, Lua 5.2 a Redis

  4. Hadoop ekosystém – Úvod do Hadoop komponent