es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo poner un HashMap en una variable de tipo BroadCast?

Estoy tratando de colocar HashMap en la variable Broadcast, pero obtengo el siguiente error:

El método broadcast(T, ClassTag<t>) en el tipo SparkContext no es aplicable para los argumentos (Map<string,string>, ClassTag<hashmap>)

en el siguiente fragmento de código:

Broadcast<><string, string="">> br = ss.sparkContext().broadcast(mp, classTag(HashMap.class));

Código completo:

private static <t> ClassTag<t> classTag(Class<t> clazz) {
    return scala.reflect.ClassManifestFactory.fromClass(clazz);
}

Dataset<row> schema = ss.read().format("csv").option("delimeter", ",").option("header", "true")
        .option("quote", "").load("D:\\Data\\schema.csv");

Map<string, string=""> mp = new HashMap<string, string="">();

schema.foreach((ForeachFunction<row>) row -> {
    String[] names = row.schema().fieldNames();

    for (int i = 0; i < names.length; i++) {
        mp.put(names[i], row.getAs(names[i]));
    }

});

Broadcast<><string, string="">> br = ss.sparkContext().broadcast(mp, classTag(HashMap.class));

Estoy literalmente atascado en esto. ¿Alguien puede sugerir qué estoy haciendo mal?</string,></string,></string,></string,></string,string>

Tags:  ,

Answer

  1. Avatar for davy.ai

    El mensaje de error sugiere que el método broadcast en SparkContext no puede recibir un argumento de tipo Map<string, string=""> con una etiqueta de clase HashMap.

    Una posible explicación para esto es que la etiqueta de clase proporcionada no coincide con el tipo real del objeto que se está transmitiendo. La clase HashMap es un subtipo de la interfaz Map, pero la etiqueta de clase proporcionada es específicamente para HashMap.

    Para solucionar esto, intenta cambiar la etiqueta de clase a Map.class en lugar de HashMap.class:

    Broadcast<><string,string>> br = ss.sparkContext().broadcast(mp, classTag(Map.class));
    

    Esto debería hacer que el parámetro de tipo de la transmisión coincida con el tipo real del objeto que se está transmitiendo.</string,string></string,>

Comments are closed.