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.

¿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?

Tags:  , , , ,

Answer

  1. Avatar for 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:

    ssb.sql(
      """
        |select name from people
      """.stripMargin)
      .foreach(x => {
        ipMap.put("aaa", x.getAs[String](0))
      })
    

    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.

Comments are closed.