如何从 StructType 获取 avro 模式

How to get the avro schema from StructType

我有一个数据框

Dataset<Row> dataset = getSparkInstance().createDataFrame(newRDD, struct);

dataset.schema() 返回给我一个 StructType。

但我希望将实际模式存储在 sample.avsc 文件中

基本上我想将 StructType 转换为 Avro 架构文件 (.avsc)。

有什么想法吗?

下面的代码是解决我的问题的方法。 在这里,我保存 .avro 文件并从中获取模式。

df.write().mode(SaveMode.Overwrite).format("com.databricks.spark.avro").save("outputPath");

            File files = new File("outputPath");
            String[] children = files.list();

            String filename="";
            for(String file : children) {
                if (file.contains("SUCCESS")) {

                }else {
                    filename=file;
                    if(file.contains(".crc")) {
                        filename= file.replaceAll(".crc", "");
                        if(filename.startsWith(".")) {
                            filename=filename.substring(1);

                        }
                        while(!new File("outputPath/"+filename).exists()) {
                            System.out.println("outputPath/"+filename);
                            Thread.sleep(100);
                        }
                    }                   
                }
            }
            System.out.println(files.getAbsolutePath()+"/"+filename);
            DatumReader<GenericRecord> datumReader = new GenericDatumReader<>();
            DataFileReader<GenericRecord> dataFileReader = new DataFileReader<>(new File("outputPath/"+filename), datumReader);
            Schema schema = dataFileReader.getSchema();
            System.out.println(schema.toString());