scala - 如何从 avro4s 3.0.4 迁移到 4.0.0-RC2?
问题描述
如何从 avro4s 3.0.4 迁移到 4.0.0-RC2?我有以下编译错误:
[error] /Users/nicolae.marasoiu/proj/data-availability-global-topic-conveyor/src/main/scala/com/ovoenergy/globaltopics/serdes/AvroFormatImplicits.scala:8:15: value const is not a member of object com.sksamuel.avro4s.SchemaFor
[error] SchemaFor.const(new Schema.Parser().parse(getClass.getResourceAsStream(hasSchema.resourcePath)))
[error] ^
[error] /Users/nicolae.marasoiu/proj/data-availability-global-topic-conveyor/src/main/scala/com/ovoenergy/globaltopics/serdes/AvroFormatImplicits.scala:11:26: not enough arguments for method apply: (implicit evidence$1: com.sksamuel.avro4s.Encoder[T], implicit evidence$2: com.sksamuel.avro4s.Decoder[T])com.sksamuel.avro4s.RecordFormat[T] in object RecordFormat.
[error] Unspecified value parameter evidence$2.
[error] RecordFormat.apply[T](AvroSchema[T](readSchema))
[error] ^
[error] /Users/nicolae.marasoiu/proj/data-availability-global-topic-conveyor/src/main/scala/com/ovoenergy/globaltopics/serdes/SerdeProvider.scala:29:37: org.apache.avro.Schema does not take parameters
[error] val schema = SchemaFor[T].schema(DefaultFieldMapper)
[error] ^
[error] /Users/nicolae.marasoiu/proj/data-availability-global-topic-conveyor/src/main/scala/com/ovoenergy/globaltopics/serdes/SerdeProvider.scala:37:70: no arguments allowed for nullary method build: ()com.sksamuel.avro4s.AvroOutputStream[T]
[error] val os = AvroOutputStream.binary[T].to(output).build(schema)
[error] ^
[error] four errors found
[error] (Compile / compileIncremental) Compilation failed
[error] Total time: 17 s, completed 28-Jul-2020 19:42:21
[IJ]sbt:global-topic-conveyor>
解决方案
首先,您可以随时关注avro4s github 存储库中的更改。此外,您可以查看您指定的版本之间的具体更改。
你没有附上任何源代码,所以我会尝试解决你的失败,因为我可以从你的失败中理解它们。
SchemaFor.const
在 3.0.5 版本中被删除。您可以在版本之间的差异中看到这一点。假设您有Schema s
,并且到目前为止您已启动SchemaFor.const(s)
,现在您需要启动它:SchemaFor(s)
。将使用默认的 fieldMapper。你可以在这里看到它。- RecordFormat不再接受参数。因此,假设您有一个类型 T,应用于
RecordFormat.apply[T](AvroSchema[T](readSchema))
,您需要将其更改为:RecordFormat[T]
。 - 与数字 1 非常相似。
SchemaFor.schema
已删除。相反,您可以这样做:SchemaFor[T].schema
. Schema不再接受参数,所以你不能用括号调用它。 AvroOutputStream.build
用于将模式作为参数。它不再需要它了。您需要更改AvroOutputStream.binary[T].to(output).build(schema)
为:AvroOutputStream.binary[T].to(output).build()
推荐阅读
- php - 计算非按位运算符的步骤
- html - 测量网格宽度
- hex - 了解原始 8 位 8000Hz PCM 正弦波的十六进制输出
- android - 使用 Firebase 中的两组数据填充 RecyclerView
- r - 如何在给定字符串处分隔数据文件中的列?
- php - 数组中的 div 回显多次出现
- google-cloud-platform - 嵌入式实体和使用 GCP 数据存储上的祖先路径的实体之间的区别
- sql - 如何通过从 SQL 查询中删除分隔符来获取记录
- python - 使用关键字参数“{'pk': ''}' 未找到“plan_edit”的反向。尝试了 1 种模式:['palan/edit$']
- tensorflow - 为什么 AdamOptimizer 无法找到最小化 x*x 的最优值?