0

我有一个大规模的分布式系统,它每天下载大量的大型 .csv 文件并对数据进行索引。可以说,我们的文件(file.csv)是: col1 col2 col3 user11 val12 val13 user21 val22 val23

然后我们逐行读取该文件并存储该文件中 user11 或 user12 的行所在位置的字节偏移量。例如:索引表 - user11 -> 1120-2130(字节偏移) user12 -> 2130-3545(字节偏移)

当有人说删除user11的数据时,我们参考这张表,下载并打开文件,删除文件中的字节偏移量。请注意,这个字节偏移量是整行的。

如何设计系统来处理镶木地板文件?Parquet 文件按列操作。要获得一整行的 10 列,我需要打 10 次电话吗?然后,形成一整行,计算字节,然后将它们存储在表中?然后,在删除时,我将不得不再次形成行然后删除字节?

其他选项是存储每列的字节偏移量并按列处理,但这会炸毁索引表。

如何以行方式有效地处理镶木地板文件?当前系统是 C# 中的后台作业。

4

1 回答 1

0

使用Cinchoo ETL,一个开源库,可以轻松地将 CSV 转换为 parquet 文件。

string csv = @"Id,Name
1,Tom
2,Carl
3,Mark";

using (var r = ChoCSVReader.LoadText(csv)
   .WithFirstLineHeader()
   )
{
    using (var w = new ChoParquetWriter("*** PARQUET FILE PATH ***"))
        w.Write(r);
}

有关更多信息,请查看https://www.codeproject.com/Articles/5270332/Cinchoo-ETL-Parquet-Reader文章。

小提琴样本https ://dotnetfiddle.net/Ra8yf4

免责声明:我是这个库的作者。

于 2021-12-13T01:31:07.357 回答