我有一个包含股票交易历史的CSV文件,其大小为70兆字节。 我想在其上运行我的程序,但不想每次开始等待30秒。
1。 只需将CSV文件转换为Haskell源文件,如下所示:
From | TO
-------------------------------------------
1380567537,122.166,2.30243 | history = [
... | (1380567537,122.166,2.30243)
... | , ...
... | ]
2。 使用Template Haskell来解析文件编译时。
尝试第一种方法我发现在尝试编译一个列表(70 MB源代码)3小时后,我的GHC占用了12GB的内存。
这是单一的可用方法吗?或者我可以在源文件中使用硬编码的大数据结构? 为什么GHC无法编译文件?是否由于复杂的优化或其他因素而导致组合爆炸?
答案 0 :(得分:3)
硬编码这么多数据并不是一个常见的用例,所以编译器不能很好地处理它也就不足为奇了。
更好的解决方案是将数据放入比CSV更容易阅读的格式。例如,考虑编写一个解析CSV文件的程序,并使用cereal之类的包来序列化生成的结构。然后你的主程序可以读取二进制文件,它应该比你的CSV文件快得多。
这种方法的另一个好处是,在新数据上运行程序会更容易,也不需要重新编译。