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