我有一个dataFrame
Dataset<Row> dataset = getSparkInstance().createDataFrame(newRDD, struct);
dataset.schema()
正在给我一个StructType。
但我希望实际架构存储在sample.avsc
文件
基本上我想将StructType转换为Avro Schema文件(.avsc)。
任何想法?
答案 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());