csv 类型提供程序中的缓存有什么用?
What's the use of cache in csv type provider?
我对 Cache
和 CacheRows
有点困惑。
似乎MyCsvType.Load(path).Take(30000).Cache()
实际上并没有立即读取30000行。 (不同于 Seq.cache
)
那么,既然我们已经 CacheRows
为什么还需要 Cache
此外,如果我只对前 30000 行感兴趣,我应该使用 MyCsvType.Load(path).Take(30000)
还是 MyCsvType.Load(path).Rows |> Seq.take 30000
如果你看一下F#数据源码,可以看到Cache
、Take
等运算符只是在背后调用了相应的Seq.xyz
操作(这是in CsvRuntime.fs).
主要区别在于,当您创建类型提供程序而未指定 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
我对 Cache
和 CacheRows
有点困惑。
似乎MyCsvType.Load(path).Take(30000).Cache()
实际上并没有立即读取30000行。 (不同于 Seq.cache
)
那么,既然我们已经 CacheRows
Cache
此外,如果我只对前 30000 行感兴趣,我应该使用 MyCsvType.Load(path).Take(30000)
还是 MyCsvType.Load(path).Rows |> Seq.take 30000
如果你看一下F#数据源码,可以看到Cache
、Take
等运算符只是在背后调用了相应的Seq.xyz
操作(这是in CsvRuntime.fs).
主要区别在于,当您创建类型提供程序而未指定 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