我试图通过使用它来读取CSV文件来了解有关FSharp.Data项目的更多信息。 CSV文件是Kaggle数字识别器竞赛数据的简化版本。
当我读取包含785列和113行(包括标题行)的CSV文件时,以下两行代码执行速度非常慢:
type trainingSet = CsvProvider<"Data/trainSmall.csv", ",", CacheRows=false>
let data = trainingSet.Load("Data/trainSmall.csv")
当我将第一行发送到F#interactive时,它会在大约10秒内返回,而当我将第二行代码发送到F#interactive时,在交互式提示回复之前需要超过5分钟。
我使用F#3.0和Xamarin Studio在2013年使用2.6 GHz I5处理器和16GB内存在我的MacBook Pro上运行代码。我尝试了在同一硬件上在VM下运行的Windows7 / VS2013的相同实验。结果具有可比性。当我使用同一台机器并尝试用R做同样的事情时,它是如此之快,以至于我无法用普通手表计时。
请告诉我Fsharp.Data正确使用CSV typeprovider的建议!
答案 0 :(得分:1)
我建议您不要使用CsvProvider。您正在加载矩阵,因此您无法获得推断每列的类型的任何好处,因为它们都是相同的。您仍然可以使用CsvFile来使用F#Data的CSV解析器。 CsvProvider针对列数不多但行可能很多的文件进行了优化。生成代码的方式将尝试在您的示例中生成一个包含785个元素的元组,这将无法正常工作
答案 1 :(得分:0)