Как сохранить большой массив записей F # в файл?
Я хочу сохранить большой массив записей f # (> 10 000 000 элементов) на диск, чтобы впоследствии было проще перезагрузить массив в память. Я использовал следующую простую функцию из Visual F # 2010 для технических вычислений:
let save filename x =
use stream = new FileStream(filename, FileMode.Create)
BinaryFormatter().Serialize(stream, x)
type Test = { a : int; b : int}
let x = [| for i in 1..6 do
let a=i
let b=i*i
yield {a=a;b=b}|]
save "file.dat" x
Когда я делаю это (с реальными данными), я получаю ошибку:
System.Runtime.Serialization.SerializationException: The internal array cannot expand to greater than Int32.MaxValue elements.
Прямо сейчас, мое решение состоит в том, чтобы преобразовать в Deedle и затем сохранить как CSV, но я предполагаю, что есть более эффективный в вычислительном отношении вариант для сохранения / перезагрузки, который не требует перестройки массива из CSV.
let x2 = x |> Frame.ofRecords
x2.SaveCsv("file.csv")