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.

Clasifique cada instancia de un RDD | Apache Spark Scala

Estoy comenzando a trabajar con RDD y tengo algunas dudas. En mi caso, tengo un RDD y quiero clasificar sus datos. Mi RDD contiene lo siguiente:

Array[(String, String)] = Array((data: BD=bd_users,BD_classified,contains_people, rbd: BD=bd_users,BD_classified,contains_people),
(data: BD=bd_users,BD_classified,contains_people,contains_users, user: id=8282bd, BD_USERS,bdd),
(data: BD=bd_experts,BD_exp,contains_exp,contains_adm, rbd: BD=bd_experts,BD_ea,contains_exp,contains_adm),
(data: BD=bd_test,BD_test,contains_acc,contains_tst, rbd: BD=bd_test,BD_test,contains_tst,contains_t))

Como puedes ver, el RDD contiene dos cadenas, la primera empieza con “data” y la segunda empieza con “rbd”. Lo que quiero hacer es clasificar cada instancia de este RDD como se puede ver aquí:

Si la instancia contiene bd_users y BD_classified -> users
bd_experts y BD_exp -> experts
BD_test -> tests

La salida sería algo así para este RDD:

  1. Usuarios
  2. Usuarios
  3. Expertos
  4. Test

Para hacer esto, me gustaría usar un mapa que llame a una función para cada instancia en este RDD, pero no sé cómo orientarlo:

val rdd_groups = rdd_1.map(x=>x(0).toString).map(x => getGroups(x))
def getGroups(input: String): (String) = {
// aquí debería usar, por ejemplo, caso para clasificar estas cadenas
}

Tags:  ,

Answer

  1. Avatar for davy.ai

    Puedes usar la expresión match para clasificar las cadenas en tu RDD. La expresión match es similar a la declaración switch en otros lenguajes. Te permite comparar un valor con un conjunto de patrones y ejecutar código basado en el patrón que coincide.

    Por ejemplo, podrías usar el siguiente código para clasificar las cadenas en tu RDD:

    val rdd_groups = rdd_1.map(x => x(0).toString).map(x => getGroups(x))
    def getGroups(input: String): (String) = {
      input match {
        case x if x.contains("bd_users") && x.contains("BD_classified") => "usuarios"
        case x if x.contains("bd_experts") && x.contains("BD_expert") => "expertos"
        case x if x.contains("BD_test") => "pruebas"
        case _ => "desconocido" 
      }
    }
    

    La salida de este código sería algo como esto para tu RDD:

    1. Usuarios
    2. Usuarios
    3. Expertos
    4. Pruebas

Comments are closed.