如何使用Scala从Avro Schema中获取所有字段名称?
用Scala提取Avro Schema的所有字段名称
没问题!咱直接来实现和你Java版本功能一致的Scala代码,先回顾下你的示例Avro Schema:
{ "type": "record", "name": "wpmcn.MyPair", "doc": "A pair of strings", "fields": [ {"name": "left", "type": "string"}, {"name": "right", "type": "string"} ] }
在Scala里,我们可以直接复用Avro的Java库(毕竟Scala和Java无缝兼容),同时借助Scala的函数式语法让代码更简洁:
import org.apache.avro.Schema import java.io.InputStream object AvroFieldExtractor extends App { // 加载Avro Schema文件 val schemaInputStream: InputStream = getClass.getClassLoader.getResourceAsStream("pair.avsc") val schema: Schema = new Schema.Parser().parse(schemaInputStream) // 提取所有字段名称,用Scala的map操作替代Java的循环 val fieldNames: List[String] = schema.getFields.map(_.name()).toList // 打印所有字段名 fieldNames.foreach(println) }
关键说明:
- 和Java版本逻辑一致,通过类加载器获取schema文件的输入流,再用
Schema.Parser解析得到Schema对象 - Scala可以直接调用Java的
schema.getFields()方法,返回的Java集合能通过.map(_.name())快速转换,最后转成Scala原生的List - 用
foreach(println)替代Java的for循环写法,更贴合Scala的函数式编程风格
内容的提问来源于stack exchange,提问作者user9750148
相关产品推荐
相关产品推荐

