我正在尝试构建一个trait
,它将为我拥有的RDD
类型实现通用帮助方法。
例如:
abstract class MyClass(name: String) {
final def getName: String = name
}
trait MyTrait[T <: MyClass] {
def myMethod(
input: RDD[T],
something: String
): RDD[T] = {
input.filter(_.getName != something)
}
def otherExample(
inputA: RDD[(T, String)],
inputB: RDD[(T, Int)]
): RDD[(T, (String, Int)] = {
inputA
.keyBy(_._1.getName)
.join(inputB....)
...
}
}
但是我收到诸如
之类的奇怪错误 value mapValues is not a member of org.apache.spark.rdd.RDD[(T, String)]
[error] possible cause: maybe a semicolon is missing before `value mapValues'?
我试图在通用类ClassTag
中添加T
,但是由于[T <: MyClass : ClassTag]
或[T : MyClass : ClassTag]
无效,我找不到正确的语法。
谢谢!
答案 0 :(得分:0)
所以我能够解决我的问题。
我没有意识到,但是问题仅来自mapValues
。
这是由于T
不是ClassTag
造成的。
为解决此问题,我在使用(implicit ct: ClassTag[T])
的方法中添加了mapValues
并解决了该问题。