如何从 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());
我有一个数据框
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());