我仍然是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)
}
据我所知,这应该可行但是在尝试编译时我会遇到以下错误。
这些我不明白。 我没有在任何地方将类型参数传递给Numeric [V]。上下文绑定也不应自动导入转换的“证据”吗?
我希望最终能够使用我自己的特性而不是数字。
编辑:
我尝试在函数中明确写出隐含的evdience,如下所示:
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:Numeric的隐含值”错误。
答案 0 :(得分: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)
}
问题是指定数字[V]而不仅仅是数字。 我现在遇到了更多问题,但那是另一天。