flink read custom types-implicit value error:`caused by:java.lang.nosuchmethodexception:< init>()`

wdebmtf2  于 2021-06-25  发布在  Flink
关注(0)|答案(1)|浏览(351)

我在努力读书 avro 案例类文件: UserItemIds 包括案例类类型: User , sbt 以及 scala 2.11 ```
case class User(id: Long, description: String)

case class UserItemIds(user: User, itemIds: List[Long])

val UserItemIdsInputStream = env.createInput(new AvroInputFormat[UserItemIds](user_item_ids_In, classOf[UserItemIds]))

UserItemIdsInputStream.print()

但是接收:错误:

Caused by: java.lang.NoSuchMethodException: schema.User.()

有谁能指导我如何使用这些类型吗?这个例子与 `avro` 文件,但这可能是 `parquet` 或任何习俗 `DB` 输入。
我需要用吗 `TypeInformation` ? 例:如果是,怎么做?

val tupleInfo: TypeInformation[(User, List[Long])] = createTypeInformation[(User, List[Long])]

我也看到了 `env.registerType()` ,是否与问题有关?非常感谢您的帮助。
我找到了解决办法 `java error` 在本例中添加默认构造函数时,我将factory方法添加到
scala `case class` 通过将其添加到伴随对象

object UserItemIds{
case class UserItemIds(
user: User,
itemIds: List[Long])
def apply(user:User,itemIds:List[Long]) = new
UserItemIds(user,itemIds)}

但这并没有解决问题
iugsix8n

iugsix8n1#

必须为 User 以及 UserItemIds 类型。这可能看起来如下:

case class User(id: Long, description: String) {
  def this() = this(0L, "")
}

case class UserItemIds(user: User, itemIds: List[Long]) {
  def this() = this(new User(), List())
}

相关问题