【问题标题】:Applying Spark reduceByKey to generic with context bounds将 Spark reduceByKey 应用于具有上下文边界的泛型
【发布时间】:2016-05-13 14:08:47
【问题描述】:

我对 Scala 中的上下文界限仍然很陌生,我正在尝试编写一个函数,该函数可以对任何满足上下文界限的泛型执行 reduceByKey。 例如

def myReduce[K: ClassTag, V: ClassTag: Numeric[V]](in: RDD[(K, V)]): RDD[(K, V)] = {
  in.reduceByKey{case (v1, v2) =>
    implicityly[Numeric[V]].plus(v1, v2)
  }

据我了解,这应该可以,但是在尝试编译时出现以下错误。

  1. 错误:找不到参数 e 的隐式值:数字
  2. 错误:Numeric[V] 不采用类型参数

这些我不明白。 我没有在任何地方将类型参数传递给 Numeric[V]。上下文绑定也不应该自动导入转换的“证据”吗?

我希望最终使用我自己的特性而不是数字。

编辑:

我尝试在函数中显式编写隐式证据如下:

def myReduce[K: ClassTag, V: ClassTag](in: RDD[(K, V)])(implicit ev: V => Numeric[V]): RDD[(K, V)] = {
  in.reduceByKey{case (v1, v2) =>
    implicityly[Numeric[V]].plus(v1, v2)
  }

但我仍然收到“错误:找不到参数 e 的隐含值:数字”错误。

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    好的,我解决了这个问题

    def myReduce[K: ClassTag, V: ClassTag: Numeric](in: RDD[(K, V)]): RDD[(K, V)] = {
      in.reduceByKey{case (v1, v2) =>
        implicityly[Numeric[V]].plus(v1, v2)
      }
    

    问题是指定 Numeric[V] 而不仅仅是 Numeric。 我现在遇到了更多问题,但那是另一天的事了。

    【讨论】:

      猜你喜欢
      • 2018-10-23
      • 2015-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-27
      • 2020-11-05
      相关资源
      最近更新 更多