我正在尝试阅读包含案例类avro
的{{1}}文件,其中包括案例类类型: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.<init>()
个文件,但这可以是avro
或任何自定义parquet
输入。
我需要使用DB
吗?例如:如果是,怎么办?
TypeInformation
我也看到 val tupleInfo: TypeInformation[(User, List[Long])] = createTypeInformation[(User, List[Long])]
,它与问题有关吗?非常感谢任何帮助。
我发现此env.registerType()
的解决方案为Adding a default constructor,在这种情况下我将工厂方法添加到java error
scala
,方法是将其添加到随播对象
case class
但这还没有解决问题
答案 0 :(得分:1)
您必须为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())
}