Search code examples
scalacsvtuplesstrong-typing

Strongly typed access to csv in scala?


I would like to access csv files in scala in a strongly typed manner. For example, as I read each line of the csv, it is automatically parsed and represented as a tuple with the appropriate types. I could specify the types beforehand in some sort of schema that is passed to the parser. Are there any libraries that exist for doing this? If not, how could I go about implementing this functionality on my own?


Solution

  • product-collections appears to be a good fit for your requirements:

    scala> val data = CsvParser[String,Int,Double].parseFile("sample.csv")
    data: com.github.marklister.collections.immutable.CollSeq3[String,Int,Double] = 
    CollSeq((Jan,10,22.33),
            (Feb,20,44.2),
            (Mar,25,55.1))
    

    product-collections uses opencsv under the hood.

    A CollSeq3 is an IndexedSeq[Product3[T1,T2,T3]] and also a Product3[Seq[T1],Seq[T2],Seq[T3]] with a little sugar. I am the author of product-collections.

    Here's a link to the io page of the scaladoc

    Product3 is essentially a tuple of arity 3.