我对Cache
和CacheRows
感到有点困惑。
似乎MyCsvType.Load(path).Take(30000).Cache()
实际上并没有立即读取30000行。 (与Seq.cache
不同)
然后,鉴于我们已经Cache
CacheRows
此外,如果我只对前30000行感兴趣,我应该使用MyCsvType.Load(path).Take(30000)
还是MyCsvType.Load(path).Rows |> Seq.take 30000
答案 0 :(得分:2)
如果您查看F#数据源代码,可以看到Cache
,Take
和其他运营商只是在封面下调用相应的Seq.xyz
操作(这是{{3 }})。
关键区别在于,在未指定CacheRows=false
的情况下创建类型提供程序时,默认情况下它实际上会调用Cache
。因此,诀窍是使用CacheRows=false
创建类型提供程序,然后您可以互换地使用Seq.cache
或Cache
方法(以及其他操作)。
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