Как использовать TypeInformation в универсальном методе с использованием Scala - PullRequest
1 голос

Я пытаюсь создать универсальный метод в Apache Flink для анализа DataSet [String] (строки JSON) с использованием классов case. Я попытался использовать TypeInformation, как это упомянуто здесь: https://ci.apache.org/projects/flink/flink-docs-stable/dev/types_serialization.html#generic-methods

Я использую liftweb для анализа строки JSON, это мой код:

import net.liftweb.json._
import org.apache.flink.api.common.typeinfo.TypeInformation
import org.apache.flink.api.scala._

class Loader(settings: Map[String, String])(implicit environment: ExecutionEnvironment) {

  val env: ExecutionEnvironment = environment

  def load[T: TypeInformation](): DataSet[T] = {

    val data: DataSet[String] = env.fromElements(
      """{"name": "name1"}""",
      """{"name": "name2"}"""
    )

    implicit val formats = DefaultFormats

    data.map(item => parse(item).extract[T])

  }
}

Но я получил ошибку:

No Manifest available for T
data.map(item => parse(item).extract[T])

Затем я попытался добавить манифест и удалить информацию типа следующим образом:

def load[T: Manifest](): DataSet[T] = { ...

И я получил следующую ошибку:

could not find implicit value for evidence parameter of type org.apache.flink.api.common.typeinfo.TypeInformation[T]

Я очень смущен этим, я очень ценю вашу помощь. Спасибо.

...