【发布时间】:2012-05-26 07:23:56
【问题描述】:
这是我第一次在 F# 中进行 a) 函数式编程 b)。
磁盘上基本上有很多文件(n > 50);每个文件存储仪器的读数和读取该读数的时间的时间戳。问题是要根据时间戳对所有文件中的所有读数进行排序。
注意文件很大。每个文件超过 10,000 个条目。
File 1: <12:00, XXX> ; <15:30, XXX> ; <18:20, XXX> ;
File 2: <10:45, XXX> ; <16:20, XXX> ; <16:55, XXX> ;
File 3: <17:50, XXX> ;
第一个 n00b 的事情是获取 N 的所有文件中的所有条目,然后使用 F# 的内置排序事物之一。如果我们从每个文件中取出“1”的块,那么在取出下一个块时,File 3: <17:50, XXX> 将是未排序的。为了解决这个问题,打算检查一个块中的最低和最高时间戳值,并测试它们是否位于前一个或后一个块的范围内。
基本上,我仍然在以一种命令式的方式思考(几乎十年的 C 语言就是这样做的)。最近我玩弄了一种生产者-消费者的方法来使用 MailboxProcessor。
来自经验丰富的 F# 程序员,是否有任何“功能性”和更好的方法来使用 F# 并行排序多文件时间戳?
【问题讨论】:
-
“文件很大”。我们正在查看多少 TB 的数据?
-
大于主内存容量。由某些物理检测器 expt 生成,读数以纳秒为间隔。
标签: f# functional-programming parallel-processing