Soy capaz de imprimir los datos en dos RDD con el siguiente código.

usersRDD.foreach(println)
empRDD.foreach(println)

Necesito para comparar los datos de dos RDDs. ¿Cómo puedo recorrer y comparar los datos de campo en un dispositivo de este tipo con los datos de campo en otro dispositivo de este tipo. Por ejemplo: recorrer los registros y comprobar si el nombre y la edad en userRDD tiene un registro coincidente en empRDD, si no poner en separar RDD.

He probado con userRDD.substract(empRDD) pero fue comparar todos los campos.

InformationsquelleAutor Ramakrishna | 2015-01-05

2 Comentarios

  1. 6

    Tienes que ingresar los datos en cada uno de los RDD así que hay algo para unirse a los registros. Eche un vistazo a groupBy por ejemplo. Entonces usted join la resultante de los Ddr. Para cada clave, se obtiene los valores coincidentes en ambas. Si usted está interesado en la búsqueda de la inigualable teclas, utilice leftOuterJoin, como este:

    //Returns the entries in userRDD that have no corresponding key in empRDD.
    def nonEmp(userRDD: RDD[(String, String)], empRDD: RDD[(String, String)]) = {
      userRDD.leftOuterJoin(empRDD).collect {
        case (name, (age, None)) => name -> age
      }
    }
    
    • Suena como cooperativa puede estar interesado en la búsqueda de claves que están presentes en un dispositivo de este tipo y la falta de la otra. Para esto, usted necesita leftOuterJoin en lugar de join. Vale la pena mencionar en la respuesta.
    • Gracias Sean, pero necesito encontrar el unmatching datos de las dos RDDs. va a ser grande, si se proporciona código de ejemplo.
    • Ah gracias @DanielDarabos, que es la respuesta correcta. No entendí el texto original.
    • He añadido un ejemplo con leftOuterJoin. Espero que ayude.
  2. 2

    De curso de las soluciones anteriores son correctos y están completos! Sólo una propuesta , si y sólo si el Ddr se sincronizan(Mismas filas tienen las mismas claves). Puede utilizar una solución distribuida y explotar el paralelismo mediante el uso de sólo la chispa de transformaciones a través de la siguiente solución:

    def distrCompare(left: RDD[(Int,Int)], right: RDD[(Int,Int)]): Boolean = {
      val rdd1 = left.join(right).map{case(k, (lv,rv)) => (k,lv-rv)}
      val rdd2 = rdd1.filter{case(k,v)=>(v!=0)}
      var equal = true;
      rdd2.map{
        case(k,v)=> if(v!=0) equal = false
      }
      return equal
    }
    

    Usted puede elegir el número de particiones en «join».

Dejar respuesta

Please enter your comment!
Please enter your name here