Ran*_*ong 8 c# datatables bigdata dataframe parquet
我正在使用 Parquet.Net 读取镶木地板文件,但从镶木地板文件中读取的唯一选项是。
//get the first group
Parquet.ParquetRowGroupReader rowGroup = myParquet.OpenRowGroupReader(0);
//gets the first column
Parquet.Data.DataColumn col1 = rowGroup.ReadColumn(myParquet.Schema.GetDataFields()[0]);
Run Code Online (Sandbox Code Playgroud)
这允许我从第一个 rowGroup 获取第一列,但问题是,第一个 rowGroup 可能有 400 万行,而 readColumn 将读取所有 400 万个值。
我如何告诉 readColumn 我只希望它读取前 100 行。读取全部 400 万行会浪费内存和文件读取时间。
实际上,我遇到了内存错误,直到我更改了代码,将 400 万个值数组的大小调整为 100。在调用每一列之后。
我不一定需要基于行的访问,我可以使用列,我只是不需要每列中包含整个 rowGroup 的值。这可能吗?如果基于行的访问更好,那么如何使用它?Parquet.Net 项目站点没有给出任何示例,仅讨论表格。
如果您查看parquet-dotnet 文档,出于性能原因,他们不建议将超过 5000 条记录写入一个行组,尽管在页面底部他们说它们被设计为平均保存 50000 行:
出于性能原因,建议不要在单个行组中包含超过 5'000 行
我们正在与我的团队一起处理一个行组中的 100000 条记录,总体而言,这可能取决于您存储的内容,但一列内的一个行组中的 4000000 条记录听起来确实太多了。
因此,为了回答您的问题,只读取列的一部分,使列内的行组更小,然后只读取您希望的行组数量。如果您只想读取 100 条记录,则读取第一个行组并从中取出前 100 条记录,合理大小的行组读取速度非常快。
归档时间: |
|
查看次数: |
2119 次 |
最近记录: |