Как избежать перегрузки метода с Scala типами для generi c Spark RDD? - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть такой метод:

def save[T](index: String, data: RDD[T]) = {
    spark.sqlContext.createDataFrame(data)
    // ...do other stuff...
}

, но я не могу скомпилировать его, так как продолжаю получать:

Error:(42, 32) overloaded method value createDataFrame with alternatives:
  [A <: Product](data: Seq[A])(implicit evidence$2: reflect.runtime.universe.TypeTag[A])org.apache.spark.sql.DataFrame <and>
  [A <: Product](rdd: org.apache.spark.rdd.RDD[A])(implicit evidence$1: reflect.runtime.universe.TypeTag[A])org.apache.spark.sql.DataFrame
 cannot be applied to (T)
      spark.sqlContext.createDataFrame(data.asInstanceOf[T]),

Я пробовал разные решения, но не мог заставить его работать , Есть идеи?

1 Ответ

0 голосов
/ 25 апреля 2020

Ваш save[T] должен быть подтипом T <: Product : TypeTag. Пожалуйста, проверьте ниже.

scala> import scala.reflect.runtime.universe._
import scala.reflect.runtime.universe._

scala> def save[T <: Product: TypeTag](index: String, data: RDD[T]) = {
     | spark.createDataFrame[T](data)
     | }
save: [T <: Product](index: String, data: org.apache.spark.rdd.RDD[T])(implicit evidence$1: reflect.runtime.universe.TypeTag[T])org.apache.spark.sql.DataFrame

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