2014-03-29 27 views
3

我想通過使用它讀取CSV文件來了解更多關於FSharp.Data項目的信息。 CSV文件是Kaggle數字識別器競賽中數據的簡化版本。來自FSharp.Data的CSV typeprovider的性能問題

當我讀取包含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在2.6 GHz I5處理器和16GB RAM上運行我的MacBook Pro上的代碼。我已經嘗試了在相同硬件上的VM下運行的Windows7/VS2013的相同實驗。結果是可比的。當我使用同一臺機器並試圖用R完成同樣的事情時,它速度如此之快以至於我無法用普通手錶來計時。

請指教我正確使用Fsharp.Data中的CSV typeprovider!

回答

0

Humm,第二行應該是做什麼都不是,因爲行按需讀取。有什麼不對的地方,你能否提交一份帶有repro文件的github上的問題?

+0

謝謝。我在[GitHub]上創建了一個問題(https://github.com/fsharp/FSharp.Data/issues/547) – carstenj

1

我建議你不要爲此使用CsvProvider。你正在加載一個矩陣,所以你不會得到推斷每個列的類型的任何好處,因爲它們都是相同的。您仍然可以使用CsvFile使用F#Data的CSV解析器。 CsvProvider針對列數不多但可能有許多行的文件進行了優化。代碼的生成方式將嘗試在您的示例中生成包含785個元素的元組,這不會起作用