【问题标题】:Converting Iterable[(Double, Double)] to Seq(Seq(Double))将 Iterable[(Double, Double)] 转换为 Seq(Seq(Double))
【发布时间】:2019-07-08 06:38:54
【问题描述】:

我想将 Pair RDD "myRDD" 值从 Iterable[(Double,Double)] 转换为 Seq(Seq(Double)),但是我不知道该怎么做。我尝试了以下但它不起作用。

val groupedrdd: RDD[BB,Iterable[(Double,Double)]] = RDDofPoints.groupByKey()
val RDDofSeq = groupedrdd.mapValues{case (x,y) => Seq(x,y)}

myRDD 是使用 RddofPoints 上的 groupByKey 操作形成的,它们各自的边界框作为键。 BB 是一个案例类,它是类型为 (Double,Double) 的一组点的键。我希望 RDDofSeq 的类型为 RDD[BB,Seq(Seq(Double))],但是在 groupByKey 之后,myRDD 的类型为 RDD[BB,Iterable[(Double,Double)]]。

这里会报错:

Error:(107, 58) constructor cannot be instantiated to expected type;
 found   : (T1, T2)
 required: Iterable[(Double, Double)]

我是 Scala 新手,感谢您提供这方面的任何帮助。谢谢。

ANSWER:以下内容用于实现上述目标:

val RDDofSeq = groupedrdd.mapValues{iterable => iterable.toSeq.map{case (x,y) => Seq(x,y)}}

【问题讨论】:

    标签: scala rdd iterable seq


    【解决方案1】:

    我在Scalafiddle上试过这个

    val myRDD: Iterable[(Double,Double)] = Seq((1.1, 1.2), (2.1, 2.2))
    
    val RDDofSeq = myRDD.map{case (x,y) => Seq(x,y)}
    
    println(RDDofSeq) // returns List(List(1.1, 1.2), List(2.1, 2.2))
    

    唯一的区别是我用myRDD.map(..而不是myRDD.mapValues(..

    确保myRDD 确实属于Iterable[(Double,Double)] 类型!

    评论后更新:

    如果我理解正确,您需要的是 Seq[Double] 而不是 Seq[Seq[Double]]

    应该是这样的:

    val RDDofSeq = myRDD.map{case (k,v) => v} // returns List(1.2, 2.2)
    

    类型明确后更新:

    这些值的类型为Iterable[(Double,Double)],因此您无法匹配一对。

    试试这个:

     val RDDofSeq = groupedrdd.mapValues{iterable => 
     Seq(iterable.head._1, iterable.head._2)}
    

    【讨论】:

    • 不错的答案!您甚至可以包含指向 map 和 mapValues 文档的链接。我认为主要的是 mapValues 实际上返回一个地图(如果我没记错的话),而 map...映射值/元素
    • 实际上mapValues 不适用于Iterable - 我认为这是问题所在(myRDD 不是 user331676 期望的类型)
    • 看来你是对的。这是scala-lang.org/api/2.12.3/scala/collection/Iterable.html 在任何地方都找不到的文档。虽然有一个名为 toSeq 的函数:)
    • 感谢@pme,但问题是我有一对 rdd (K,V),我只想转换序列中的值。当我只使用 map 时,它会生成一系列带有值的键。
    • @user3316676 查看我调整后的答案
    【解决方案2】:

    你只需要map,而不是mapValues

    val RDDofSeq = myRDD.map{case (x,y) => Seq(x,y)}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-29
      • 2017-12-29
      • 2014-12-19
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 2016-10-10
      • 1970-01-01
      相关资源
      最近更新 更多