我试图将CSV加载到内存中作为矢量与木薯的矢量.我的程序确实有效,但是对于50MB的csv文件使用了大量的内存,我不明白为什么.
我知道使用Data.Csv.Streaming应该对大文件更好,但我认为50MB仍然可以.我想这两个Data.Csv和Data.Csv.Streaming从GitHub的项目页面或多或少典型的例子,我也试图实现自己的解析器,输出矢量的矢量(我以我的attoparsec-CSV代码https://开头hackage.haskell.org/package/attoparsec-csv),所有这些解决方案都使用大约2000MB的内存!我确信我所做的事情有问题.这样做的正确方法是什么?
我的最终目标是将数据完全加载到内存中,以便以后进一步处理.例如,我可以将数据拆分为有趣的矩阵,并与使用Hmatrix的人一起工作.
以下是我尝试使用Cassava的2个程序:
1 /使用Data.Csv
import qualified Data.ByteString.Lazy as BL
import qualified Data.Vector as V
import Data.Csv
import Data.Foldable
main = do
csv <- BL.readFile "train.csv"
let Right res = decode HasHeader csv :: Either String (V.Vector(V.Vector(BL.ByteString)))
print $ res V.! 0
Run Code Online (Sandbox Code Playgroud)
2 /使用Data.Csv.Streaming
{-# LANGUAGE BangPatterns #-}
import qualified Data.ByteString.Lazy as BL
import qualified Data.Vector as V
import Data.Csv.Streaming
import Data.Foldable
main = do
csv <- BL.readFile "train.csv"
let !a = decode HasHeader csv :: Records(V.Vector(BL.ByteString)) …Run Code Online (Sandbox Code Playgroud)