【问题标题】:RDD[ x : Vector[String] ] to RDD[x: Vector[String] + Iterator : Vector[String] ]RDD[ x : Vector[String] ] 到 RDD[x: Vector[String] + Iterator : Vector[String] ]
【发布时间】:2016-11-15 18:20:15
【问题描述】:

DocsRDD:

RDD[Vector[String]]

DocsRDD:

Vector(Doc1.txt, Doc2.txt, Doc5.txt)
Vector(Doc4.txt, Doc3.txt)
Vector(Doc6.txt, Doc9.txt)

我想要的只是所有对偶文档,例如我想要的 DocsRDD

AllDualDocsRDD:

Vector(Doc1.txt, Doc2.txt)
Vector(Doc1.txt, Doc5.txt)
Vector(Doc2.txt, Doc5.txt)
Vector(Doc4.txt, Doc3.txt)
Vector(Doc6.txt, Doc9.txt)

以下是我的代码示例(我是 Spark、Scala 的新手)。

val AllDualDocsRDD = DocsRDD.map(e => if (e.size > 2) {
                            val V_iter = (1 to e.size).flatMap(e.combinations).filter(_.size == 2).toVector
                            V_iter.foreach(println)
                            //Here I Cannot put V_iter : scala.Vector[Vector[String]]
                        }
                        else e)

但看来我已经撞墙了!有谁知道我如何做到这一点?

【问题讨论】:

    标签: scala apache-spark rdd


    【解决方案1】:

    试试:

    sc.parallelize(
      Seq(Vector("Doc1.txt", "Doc2.txt", "Doc5.txt"))
    ).flatMap(v => v.combinations(Math.min(v.size, 2)))
    

    【讨论】:

      【解决方案2】:

      像这样在 RDD 上的直接平面图怎么样:

      val AllDualDocsRDD = DocsRDD.flatMap(  x => {
                                           if( x.size > 2){
                                                  x.combinations(2).toSeq
                                              }
                                           else Seq(x)
                                          }
                                  )
      

      这样就可以了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-16
        • 2017-02-17
        • 2016-02-06
        • 2014-05-16
        • 1970-01-01
        • 2016-08-27
        • 1970-01-01
        相关资源
        最近更新 更多