我在Clojure做数据分析。在此数据分析过程中,我正在与一个包含大约300 in数据的SQlite文件进行交互。有关此数据集的一些查询,如
(select crawls)
返回非常长的爬行信息列表。但是,针对较大列的其他查询给了我以下信息:
OutOfMemoryError Java堆空间org.sqlite.NativeDB.column_text (NativeDB.java:-2)
我可以用korma做一些简单的事情,比如:
(select authors)如下所示:
=> (first (select stories))
OutOfMemoryError Java heap space org.sqlite.NativeDB.column_text (NativeDB.java:-2)有人知道我该怎么解决这个问题吗?这是我的第一个大型数据分析项目。
发布于 2013-12-16 01:24:15
查询应该返回一个延迟的结果,这样您就可以使用结果而不需要堆中的全部内容。如果您从repl中做了一个大的选择,隐式打印就可以一次完成整个延迟的seq,这样堆就用完了。
正确的处理方法是编写一个reduce (可能是一个map / doseq组合),它一次只处理一个结果,而不保留旧的元素。注意“抓着头”,也就是说,不要绑定懒散的seq的顶部元素,否则整个东西将被保存在堆中。
https://stackoverflow.com/questions/20602040
复制相似问题