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