想知道如何将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
。
我目前的想法是找到一种方法,将Dataset<Row>
中的每个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;
}
非常感谢您的帮助:(
冰山有一个实用程序类可以帮助您:org.apache.iceberg.spark.SparkValueConverter