首页 > 解决方案 > Flink DataSet.map 得到'错误:缺少参数类型'

问题描述

我刚刚开始学习 Scala 和 Flink。当我尝试运行如下演示代码时:

private def demoFunction[T <: Vector](dataSet: DataSet[T])
  : DataSet[(linalg.Vector[Double], linalg.Vector[Double])] = {

  val metrics = dataSet.map{
    v => (1.0, v.asBreeze, linalg.Vector.zeros[Double](v.size))
  }.reduce{
    // reduce code..
  }
  // ...
}

我得到错误信息:

Error: missing parameter type v => (1.0, v.asBreeze, linalg.Vector.zeros[Double](v.size))

依赖项如下:

如果您有任何想法,请提供帮助。提前致谢。


12月12日更新。

我在v之后添加:T后解决了这个问题,似乎澄清了v是哪种类型。但我仍然对此感到困惑。

val metrics = dataSet.map{
  v:T => (1.0, v.asBreeze, linalg.Vector.zeros[Double](v.size))
}// ...

标签: scalaapache-flink

解决方案


如果Vectorin与 thenT <: Vector相同,linalg.Vector则需要一个类型参数

trait Vector[@spec(Int, Double, Float) V] extends VectorLike[V, Vector[V]] { 
...

所以 不能 公正T <: Vector, 应该 是T <: Vector[...something...].

如果VectorinT <: Vector与 不同linalg.Vector,那么也许你import breeze.linalg._Vector被解析为linalg.Vector。所以使用完全限定名

private def demoFunction[T <: yourpackage.yoursubpackage.Vector] ...

推荐阅读