【发布时间】: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)
}
据我了解,这应该可以,但是在尝试编译时出现以下错误。
- 错误:找不到参数 e 的隐式值:数字
- 错误: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