Использование Scala для вырезания большого файла CSV - PullRequest
3 голосов
/ 02 сентября 2010

Какой лучший способ сделать файловый ввод-вывод в Scala 2.8?

Все, что я хочу сделать, это разрезать массивный CSV-файл на множество более мелких, например, по 1000 строк данных на файл, и каждый файл сохраняет заголовок.

Ответы [ 2 ]

12 голосов
/ 02 сентября 2010

Для таких простых задач я бы использовал scala.io.Source. Пример будет выглядеть так:

val input = io.Source.fromFile("input.csv").getLines()

if (input.hasNext) {
  // assuming one header line
  val header = List(input.next())

  for ((i, lines) <- Iterator.from(1) zip input.grouped(linesPerFile)) {
    val out = createWriter(i) // Create a file for index i
    (header.iterator ++ lines.iterator).foreach(out.println)
    out.close
  }
}
0 голосов
/ 19 декабря 2015

Мориц ответит хорошо, при условии, что вы не столкнетесь с некоторыми более раздражающими угловыми случаями CSV. Уместным примером могут быть данные CSV, где один столбец - это строка, которая может содержать разрывы строк: нельзя полагаться на строку, находящуюся на одной строке, или вы в итоге разделите несколько строк пополам.

Я бы использовал выделенную библиотеку для разбора CSV, чтобы превратить ваши данные в итератор. kantan.csv является примером (я автор), но есть и другие альтернативы, такие как product-collection или opencsv .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...