Как построить черту для общих операций RDD - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь построить 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] не работали.

Спасибо!

1 Ответ

0 голосов
/ 20 марта 2019

Итак, я смог исправить свою проблему.

Я не понял, но проблема исходила только от mapValues.

Это было вызвано тем, что T не был ClassTag.

Чтобы решить эту проблему, я добавил (implicit ct: ClassTag[T]) к методу, в котором я использовал mapValues иэто решило это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...