从c#中的Parquet文件中读取前100行



我有这些巨大的拼花文件,存储在一个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行?

使用Cinchoo ETL -一个开源库,您可以像下面这样流式传输Parquet文件。(在后台使用Parquet.net)

Install Nuget package

安装包ChoETL。拼花

示例代码使用ChoETL;

using (var r = new ChoParquetReader(@"*** Your Parquet file ***")
.ParquetOptions(o => o.TreatByteArrayAsString = true)
)
{
var dt = r.Take(100).AsDataTable();
}

更多信息,请访问codeproject文章。

最新更新