sql >> データベース >  >> NoSQL >> MongoDB

com.mongodb.spark.exceptions.MongoTypeConversionExceptionを解決する方法:キャストできません... Java Spark

    同じ問題が発生し、 sampleSize この問題は部分的に修正されますが、データが多い場合は解決されません。

    これを修正する方法は次のとおりです。このアプローチをsampleSizeの増加と一緒に使用します (私の場合は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. MongoDBの配列フィールドでアイテムの組み合わせを取得する方法は?

    2. Mongooseにオブジェクトを保存した後、objectIDを取得するにはどうすればよいですか?

    3. MongoDB2.2のコレクションごとに異なるデータベースを作成する

    4. TypeError:UserSchemaはコンストラクターではありません(スキーマはコンストラクターMongoDBではありません)