csv - 来自 FSharp.Data 的 CSV typeprovider 的性能问题

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

我试图通过使用它来读取 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/

相关文章:

f# - 有没有一种方法可以有效地将reactjs与WebSharper结合使用

c# - 实时优化传感器数据,通过省略条目来减少日志文件的大小

f# - 在 F# 中匹配元组的不完整模式

java - 未指定 header 映射,无法按名称访问记录值(Apache Commons CSV)

f# - 为什么这会混淆 F# 编译器的类型推断?

f# - 如何在 F# 中计算 n 个序列的笛卡尔积?

f# - 是否可以在 F# 类型提供程序中使用 System.Type 作为静态参数?

f# - SqlEntityConnection(实体数据模型)TypeProvider

java - 仅限 map 的工作 - 订单

Python Dictreader 排序字段名