FAOCropsLivestock.csv包含超过1400万行.在我的.fs档案中,我宣布了
type FAO = CsvProvider<"c:\FAOCropsLivestock.csv">
Run Code Online (Sandbox Code Playgroud)
并尝试使用以下代码
FAO.GetSample().Rows.Where(fun x -> x.Country = country) |> ....
FAO.GetSample().Filter(fun x -> x.Country = country) |> ....
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,都exception被扔了.
csv在MSSQL Server中加载文件后,我也试过了下面的代码
type Schema = SqlDataConnection<conStr>
let db = Schema.GetDataContext()
db.FAOCropsLivestock.Where(fun x-> x.Country = country) |> ....
Run Code Online (Sandbox Code Playgroud)
有用.如果我query使用OleDb连接发出它也有效,但它很慢.
如何使用它来获取顺序CsvProvider?
如果您参考CSV类型提供程序文档的底部,您将看到有关处理大型数据集的部分.正如那里所解释的那样,您可以设置CacheRows = false哪些可以帮助您处理大型数据集.
type FAO = CsvProvider<"c:\FAOCropsLivestock.csv", CacheRows = false>
Run Code Online (Sandbox Code Playgroud)
然后,您可以在CSV行上使用标准序列操作作为序列,而无需将整个文件加载到内存中.例如
FAO.GetSample().Rows |> Seq.filter (fun x -> x.Country = country) |> ....
Run Code Online (Sandbox Code Playgroud)
但是,您应该注意只列举一次内容.