¿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>
davy.ai
El mensaje de error sugiere que el método
broadcast
enSparkContext
no puede recibir un argumento de tipoMap<string, string="">
con una etiqueta de claseHashMap
.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 interfazMap
, pero la etiqueta de clase proporcionada es específicamente paraHashMap
.Para solucionar esto, intenta cambiar la etiqueta de clase a
Map.class
en lugar deHashMap.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,>