如何从StructType获取avro架构

时间:2018-03-06 11:27:13

标签: spark-avro

我有一个dataFrame

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

dataset.schema()正在给我一个StructType。

但我希望实际架构存储在sample.avsc文件

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

任何想法?

1 个答案:

答案 0 :(得分:0)

下面的代码是解决我的问题的解决方法。 在这里,我保存.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());