如何在使用Scala的通用方法中使用TypeInformation

时间:2019-05-14 21:12:00

标签: scala apache-flink

我正在尝试在Apache Flink中创建一个通用方法,以使用案例类来解析DataSet [String](JSON字符串)。我尝试使用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])

然后我尝试添加清单并像这样删除TypeInformation:

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

然后我遇到下一个错误:

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

对此我感到非常困惑,非常感谢您的帮助。 谢谢。

0 个答案:

没有答案