FSharp.Data的CSV类型提供程序性能问题

3
我正在尝试通过使用FSharp.Data项目来读取CSV文件来学习更多关于该项目的信息。CSV文件是Kaggle上数字识别竞赛数据的简化版本。
当我读取包含785列和113行(包括标题行)的CSV文件时,下面的两行代码执行速度非常慢:
type trainingSet = CsvProvider<"Data/trainSmall.csv", ",", CacheRows=false>
let data = trainingSet.Load("Data/trainSmall.csv")

当我将第一行代码发送到F#交互式环境时,它会在约10秒钟内返回结果,而当我将第二行代码发送到F#交互式环境时,需要超过5分钟才能收到响应。
我正在使用F# 3.0和Xamarin Studio在我的2013年款MacBook Pro上运行代码,配备2.6 GHz I5处理器和16GB RAM。我已经尝试在同一硬件上的Windows7 / VS2013虚拟机中进行相同的实验,结果是可比较的。当我使用同一台计算机并尝试使用R执行完全相同的操作时,速度非常快,以至于我无法用普通手表计时。
请指导我如何正确使用Fsharp.Data的CSV类型提供程序!
2个回答

1
我建议您不要使用CsvProvider。由于您正在加载矩阵,因此无法从推断每列的类型中获得任何好处,因为它们都是相同的。您仍然可以使用F# Data的CSV解析器,通过使用CsvFile。CsvProvider针对具有不多列但可能有许多行的文件进行了优化。代码生成方式将尝试在您的示例中生成一个包含785个元素的元组,这样做是行不通的。

0
哎呀,第二行应该基本上什么也不做,因为行是按需读取的。那里出了问题,请您在 GitHub 上提交一个带有 repro 文件的问题报告好吗?

谢谢。我已经在GitHub上创建了一个问题。 - carstenj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接