【问题标题】:Performance issue with CSV typeprovider from FSharp.Data来自 FSharp.Data 的 CSV 类型提供程序的性能问题
【发布时间】:2014-03-29 10:54:35
【问题描述】:

我正在尝试通过将 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 分钟以上。

我从 2013 年开始在配备 2.6 GHz I5 处理器和 16GB 内存的 MacBook Pro 上使用 F# 3.0 和 Xamarin Studio 运行代码。我已经尝试在同一硬件上的虚拟机下运行 Windows7 / VS2013 进行相同的实验。结果具有可比性。当我使用同一台机器并尝试用 R 做完全相同的事情时,它是如此之快,以至于我无法用普通手表计时。

请建议我正确使用 Fsharp.Data 中的 CSV 类型提供程序!

【问题讨论】:

    标签: csv f# type-providers f#-3.0 f#-data


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      嗯,第二行应该什么都不做,因为行是按需读取的。那里出了点问题,你能在github上提交一个带有repro文件的问题吗?

      【讨论】:

      • 谢谢。我在GitHub 上创建了一个问题
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-12
      • 2013-08-01
      • 1970-01-01
      • 2016-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多