想知道如何将
Dataset<Row>
转换为 List<GenericRecord>
。
我正在谈论:
org.apache.avro.generic.GenericRecord
org.apache.spark.sql.Dataset
org.apache.spark.sql.Row
Dataset<Row> data = spark.sql(SQL_QUERY)
每个
SQL_QUERY
的结果都不同,因此每个用例的模式可能不同。
重要的是要知道我正在从
Iceberg
表中读取内容,并将文件保存为.avro
。
我目前的想法是找到一种方法将
Row
中的每个Dataset<Row>
转换为bytes[]
,然后转换为:
public static List<GenericRecord> deserialize(byte[] bytes) {
List<GenericRecord> records = new ArrayList<>();
try {
DataFileReader<GenericRecord> reader = new DataFileReader<>(
new SeekableByteArrayInput(bytes),
new ExpectedSpecificDatumReader()
);
while (reader.hasNext()) {
records.add(reader.next(null));
}
reader.close();
} catch (Exception e) {
throw new Error(e);
}
return records;
}