如何将数据集<Row>转换为列表<GenericRecord>



想知道如何将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

最新更新