我试图通过使用它来读取 CSV 文件来了解有关 FSharp.Data 项目的更多信息。 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 年配备 2.6 GHz I5 处理器和 16GB 内存的 MacBook Pro 上运行代码。我已经尝试过在同一硬件上的 VM 下运行 Windows7/VS2013 的相同实验。结果具有可比性。当我使用同一台机器并尝试用 R 做完全相同的事情时,它是如此之快,以至于我无法用普通 watch 计时。
请建议我正确使用 Fsharp.Data 的 CSV 类型提供程序!
最佳答案
我建议您不要为此使用 CsvProvider。您正在加载一个矩阵,因此您不会从推断每一列的类型中获得任何好处,因为它们都是相同的。您仍然可以通过 CsvFile 使用 F# Data 的 CSV 解析器。 CsvProvider 针对列数不多但行数可能很多的文件进行了优化。生成代码的方式将尝试在您的示例中生成一个包含 785 个元素的元组,这是行不通的
关于csv - 来自 FSharp.Data 的 CSV typeprovider 的性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22730130/