【问题标题】:How to build a trait for generic RDD operations如何为通用 RDD 操作构建特征
【发布时间】:2019-03-19 23:27:57
【问题描述】:

我正在尝试构建一个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'?

我试图在泛型类T 中添加ClassTag,但我找不到正确的语法,因为[T &lt;: MyClass : ClassTag][T : MyClass : ClassTag] 不起作用。

谢谢!

【问题讨论】:

  • 附带说明:您可以将name: String 标记为val,而不是定义getName 之类的方法。
  • 哦!我不知道那是val 在做什么!谢谢!

标签: scala apache-spark generics


【解决方案1】:

所以我能够解决我的问题。

我没有意识到,但问题只是来自mapValues

这是因为T 不是ClassTag

为了解决这个问题,我在使用mapValues 的方法中添加了(implicit ct: ClassTag[T]) 并解决了它。

【讨论】:

    猜你喜欢
    • 2020-04-18
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    相关资源
    最近更新 更多