Join для самых маленьких

Кроме операций над рядами значений, с парой PairedRDD можно сотворить обычный join.

Предположим, у нас имеется два набора данных о программистах, которые пишут код в проекте на разных языках и нам захотелось получить отчет с учетом двух наборов данных. Один набор данных мы зачем-то сохранили как последовательный файл, но сие лишь для фана и энджоймента.

    // A few developers decided to commit something
    // Define pairs <Developer name, amount of commited core lines>
    val codeRows = sc.parallelize(Seq(("Ivan", 240), ("Elena", -15), ("Petr", 39), ("Elena", 290)))

    val programmerProfiles = sc.parallelize(Seq(("Ivan", "Java"), ("Elena", "Scala"), ("Petr", "Scala")))
    programmerProfiles.saveAsSequenceFile("/data/profiles")


    val joinResult = sc.sequenceFile("/data/profiles", 
    classOf[org.apache.hadoop.io.Text], classOf[org.apache.hadoop.io.Text])
      .map { case (x, y) => (x.toString, y.toString) } // transform from Hadoop Text to String
      .join(codeRows)


    joinResult.collect.foreach(println)


(Ivan,(Java,240))
(Elena,(Scala,-15))
(Elena,(Scala,290))
(Petr,(Scala,39))

Конечно, поддерживаются не только INNER JOIN, но и аналоги FULL OUTER, RIGHT OUTER и LEFT OUTER

results matching ""

    No results matching ""