Flink DataSet.map获取“错误:缺少参数类型”

时间:2019-12-10 16:28:39

标签: scala apache-flink

我才刚刚开始学习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))

依赖关系如下:

  • linalg:导入breeze.linalg
  • 数据集:导入org.apache.flink.api.scala.DataSet
  • 载体:自定义特征
  • Scala == 2.12.8,JDK == 1.8

如果您有任何想法,请提供帮助。预先感谢。


12月12日更新。

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

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

1 个答案:

答案 0 :(得分:0)

如果Vector中的T <: Vectorlinalg.Vector相同,则它使用类型参数

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

因此它不能只是T <: Vector,而应该是T <: Vector[...something...]

如果Vector中的T <: Vectorlinalg.Vector不同,那么您import breeze.linalg._Vector可能被解析为linalg.Vector。因此,请使用完全限定的名称

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