簡體   English   中英

Spark RDD轉換問題

[英]Spark RDD transformation issue

我有這種格式的數據:

100 1 2 3 4 5

我使用以下代碼加載它:

 val data : RDD[(String, Array[Int])] = sc.textFile("data.txt").map(line => ((line.split("\t"))(0), (line.split("\t"))(1).split(" ").map(_.toInt)))

我想從Array [Int]生成對,以使值大於數字(以下代碼中為2)的數組元素與該數組的所有其他元素配對。 然后,我將使用它來生成進一步的統計信息。 例如,使用樣本數據,我應該能夠首先生成此數據:

100(3,1),(3,2),(3,4),(3,5),(4,1),(4,2),(4,3),(4,5)

val test = merged_data.mapValues { case x =>
      for (element <- x) {
        val y = x.filter(_ != element)

        if (element > 2)
          {

            for (yelement <- y)
              {
                (element, yelement)
              }
          }
      }
      }

這是我得到的o / p:Array [(String,Unit)] = Array((100,()))不知道為什么它為空。

一旦能夠解決此問題,我將對元組中的元素進行排序,並刪除重復項(如果有的話),即上述o / p

100(3,1),(3,2),(3,4),(3,5),(4,1),(4,2),(4,3),(4,5)

成為這個:

100(1,3),(2,3),(3,4),(3,5),(1,4),(2,4),(4,5)

我能夠解決這個問題:

  val test = merged_data.mapValues { case x =>
  var sb = new StringBuilder

  for (element <- x) {
    val y = x.filter(_ != element)

    if (element > 2)
      {

        for (yelement <- y)
          {
            (element, yelement)
          }
      }
  }
  sb.toString()
  }

怎么樣的:

val test = data.mapValues { x =>
    for {
        element <- x.filter(_ > 2);
        yelement <- x.filter(_ != element)
    } yield (element, yelement)
}

另外,您可能想看看: Scala中的嵌套迭代 ,它回答了為什么得到空結果的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM