【问题标题】:Flink DataSet.map get 'error: missing parameter type'Flink DataSet.map 得到'错误:缺少参数类型'
【发布时间】:2019-12-12 23:01:43
【问题描述】:

我刚刚开始学习 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:导入微风.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))
}// ...

【问题讨论】:

    标签: scala apache-flink


    【解决方案1】:

    如果T &lt;: Vector 中的Vectorlinalg.Vector 相同,那么它需要一个类型参数

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

    所以不能只是T &lt;: Vector,应该是T &lt;: Vector[...something...]

    如果T &lt;: Vector 中的Vectorlinalg.Vector 不同,那么您的import breeze.linalg._Vector 可能被解析为linalg.Vector。所以使用完全限定名

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

    【讨论】:

    • 谢谢,但还是有问题。我通过 v:T => (1.0, v.asBreeze, linalg.Vector.zeros[Double](v.size)) 修复它
    猜你喜欢
    • 2018-03-28
    • 2012-02-23
    • 2017-03-18
    • 1970-01-01
    • 2021-04-22
    • 2017-08-20
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    相关资源
    最近更新 更多