如何使用相同的逻辑遍历RDD

时间:2019-07-18 04:18:59

标签: scala loops rdd

我的数据如下:

  

1,Bob,300
  2,汤姆200
  3,山姆400

我的预期输出是:

  

(1,1)
  (2,2)
  (3,3)
  (1,鲍勃)
  (2,汤姆)
  (3,Sam)
  (1,300)
  (2,200)
  (3,400)

我是scala的初学者,我需要逻辑方面的帮助。

以下是我尝试过并得到的输出:

val data1 = file.map(x => {
  for(i <- 0 to 2) {
     for(j <- 0 to 2) {
       x(i) -> x(j)
     }
  }
})

这就是我得到的:

data1: org.apache.spark.rdd.RDD[Unit] = MapPartitionsRDD[26] at map at <console>:26
scala> data1.collect
res23: Array[Unit] = Array((), (), ())

1 个答案:

答案 0 :(得分:0)

您使用的for循环没有返回值,这就是为什么您获得RDD[Unit]的原因。

相反,您可以将Rangefor comprehension结合使用,如下所示:

val data1 = file.map(x => {
  for {
    i <- Range(0,3)
    j <- Range(0,3)
  } yield {
    x(i) -> x(j)
}})