如何使用 alpakka 将镶木地板记录 (json) 映射到案例 class
How to map parquet record (json) to case class using alpakka
我将数据保存在 parquet 文件中 json 例如
{“姓名”:“约翰”,“年龄”:23.5}
我想将其转换为
case class Person(name: String, age: Double)
所以我可以在我的 actor 中使用模式匹配。
这是我到目前为止得到的:
val reader: ParquetReader[GenericRecord] = AvroParquetReader.builder[GenericRecord](filePath).withConf(conf).build()
val source: Source[GenericRecord, NotUsed] = AvroParquetSource(reader)
source.ask[WorkerAck](28)(workerActor)
我试图将 GenericRecord
替换为 Person
但出现以下错误:
inferred type arguments [com.common.Person] do not conform to method apply's type parameter bounds [T <: org.apache.avro.generic.GenericRecord]
val source: Source[Person, NotUsed] = AvroParquetSource(reader)
我想你有两个选择
使用 Avro 代码生成器为 Person DTO class 生成代码。这将创建一个继承自通用记录的 Person class。看到这个 tutorial
添加一个将 GenericRecord 实例转换为 Person 的 actor:
Person((String)record.get("name"), (Double)record.get("age"))
我将数据保存在 parquet 文件中 json 例如 {“姓名”:“约翰”,“年龄”:23.5} 我想将其转换为
case class Person(name: String, age: Double)
所以我可以在我的 actor 中使用模式匹配。
这是我到目前为止得到的:
val reader: ParquetReader[GenericRecord] = AvroParquetReader.builder[GenericRecord](filePath).withConf(conf).build()
val source: Source[GenericRecord, NotUsed] = AvroParquetSource(reader)
source.ask[WorkerAck](28)(workerActor)
我试图将 GenericRecord
替换为 Person
但出现以下错误:
inferred type arguments [com.common.Person] do not conform to method apply's type parameter bounds [T <: org.apache.avro.generic.GenericRecord]
val source: Source[Person, NotUsed] = AvroParquetSource(reader)
我想你有两个选择
使用 Avro 代码生成器为 Person DTO class 生成代码。这将创建一个继承自通用记录的 Person class。看到这个 tutorial
添加一个将 GenericRecord 实例转换为 Person 的 actor:
Person((String)record.get("name"), (Double)record.get("age"))