我有这些巨大的镶木地板文件,存储在一个 blob 中,有超过 60 万行,我想检索前 100 个,以便我可以将它们发送到我的客户端应用程序。这是我现在用于此功能的代码:
private async Task < Table > getParquetAsTable(BlobClient blob) {
var table = new Table();
using(var stream = await blob.OpenReadAsync()) {
using(var memory = new MemoryStream()) {
await stream.CopyToAsync(memory);
var parquetReader = new ParquetReader(memory);
table = parquetReader.ReadAsTable();
}
}
var first100 = table.Take(100);
}
然而,这个过程有点缓慢。await stream.CopyToAsync(memory);
需要 20 秒并且table = parquetReader.ReadAsTable();
还需要 15 秒,所以总共我必须等待 35 秒。
有没有办法限制此流并一次获取前 100 行,而不必下载所有行,并使用ReadAsTable
然后只取前100个?
With 辛乔 ETL https://www.nuget.org/packages/ChoETL.Parquet/- 一个开源库,您可以按如下方式流式传输 Parquet 文件。 (在后台使用 Parquet.net。)
安装Nuget包
安装包 ChoETL.Parquet
示例代码
使用 ChoETL;
using (var r = new ChoParquetReader(@"*** Your Parquet file ***")
.ParquetOptions(o => o.TreatByteArrayAsString = true)
)
{
var dt = r.Take(100).AsDataTable();
}
欲了解更多信息,请访问代码项目 https://www.codeproject.com/Articles/5270332/Cinchoo-ETL-Parquet-Reader文章。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)