¿Por qué Scala no puede asignar valores a variables externas en foreach?
Este es mi código:
val array = Array("Tom,9", "Amy,10")
val peopleRDD = sc.parallelize(array)
.map(line => {
People(line.split(",")(0), line.split(",")(1).toInt)
})
import ssb.implicits._
val df = peopleRDD.toDF()
df.createOrReplaceTempView("people")
val ipMap = new mutable.HashMap[String, String]
ssb.sql("""
|select name from people
|""".stripMargin)
.foreach(x => {
ipMap.put("aaa", x.apply(0).toString)
})
for ((key, value) <- ipMap) {
println("key is" + key + " ,value is" + value)
}<br>
¿Por qué está vacío el mapa y no hay salida? ¿Cómo puedo asignar valores correctamente?
davy.ai
El mapa está vacío y no hay salida porque la consulta en la declaración SQL está seleccionando solo el campo “name” de la tabla “people”, pero el mapa siempre está insertando el mismo par clave-valor “aaa”-“name”. Por lo tanto, el mapa se sobrescribe con el mismo valor cada vez que se ejecuta el bucle foreach.
Para asignar los valores correctamente, los pares clave-valor deberían corresponder a los datos devueltos por la consulta SQL. Una forma de lograr esto es modificando el bucle foreach para usar un enfoque basado en índices y seleccionar el campo correcto de los datos de la fila:
Esto seleccionará el primer campo de cada fila devuelta por la consulta SQL (que es el campo “name”) e lo insertará en el mapa con la clave “aaa”. Si desea insertar varios pares clave-valor en el mapa, deberá cambiar la consulta SQL para seleccionar los campos que desea y modificar el bucle foreach para extraer los valores correctos e insertarlos en el mapa con sus respectivas claves.