1

我有一个数据框

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

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

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

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

任何想法?

4

1 回答 1

1

下面的代码是解决我的问题的方法。在这里,我保存 .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());
于 2018-03-07T12:42:42.707 回答