csv类型提供程序中缓存的用途是什么?

时间:2015-02-17 11:20:02

标签: f# type-providers

我对CacheCacheRows感到有点困惑。

似乎MyCsvType.Load(path).Take(30000).Cache()实际上并没有立即读取30000行。 (与Seq.cache不同)

然后,鉴于我们已经Cache

,为什么我们需要CacheRows

此外,如果我只对前30000行感兴趣,我应该使用MyCsvType.Load(path).Take(30000)还是MyCsvType.Load(path).Rows |> Seq.take 30000

1 个答案:

答案 0 :(得分:2)

如果您查看F#数据源代码,可以看到CacheTake和其他运营商只是在封面下调用相应的Seq.xyz操作(这是{{3 }})。

关键区别在于,在未指定CacheRows=false的情况下创建类型提供程序时,默认情况下它实际上会调用Cache。因此,诀窍是使用CacheRows=false创建类型提供程序,然后您可以互换地使用Seq.cacheCache方法(以及其他操作)。

let stocks = CsvProvider<"sample.csv", CacheRows=false>.GetSample()
stocks.Take(10).Cache()             // Using methods is now exactly
stocks |> Seq.take 10 |> Seq.cache  // the same as using functions