我有一个包含股票交易历史的 CSV 文件,它的大小是 70 兆字节。 我想在上面运行我的程序,但不想每次启动都等待 30 秒。
1. 只需像这样将 CSV 文件转换为 Haskell 源文件:
From | TO
-------------------------------------------
1380567537,122.166,2.30243 | history = [
... | (1380567537,122.166,2.30243)
... | , ...
... | ]
2。 使用 Template Haskell 在编译时解析文件。
尝试第一种方法后,我发现我的 GHC 在尝试编译一个列表(70 MB 源代码)3 小时后占用了 12GB 的内存。
那么 TH 是唯一可用的方法吗?或者我可以只在源文件中使用硬编码的大数据结构? 为什么 GHC 不能编译文件?它是否会因为复杂的优化或其他原因而导致组合爆炸?
最佳答案
对如此多的数据进行硬编码并不是常见的用例,因此编译器无法很好地处理它也就不足为奇了。
更好的解决方案是将数据放入某种比 CSV 更易于阅读的格式。例如,考虑编写一个程序来解析 CSV 文件并使用类似 cereal 的包序列化结果结构。 .然后你的主程序可以读取二进制文件,这应该比你的 CSV 文件快得多。
这种方法还有一个额外的好处,即在新数据上运行您的程序会更容易,并且不需要重新编译。
关于haskell - 在 Haskell 中编译大型数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19108984/