从Scala中的数组生成.csv文件

从Scala中的数组生成.csv文件,scala,csv,Scala,Csv,我在Scala中有两个元组,其形式如下: val array1 = (bucket1, Seq((dateA, Amount11), (dateB, Amount12), (dateC, Amount13))) val array2 = (bucket2, Seq((dateA, Amount21), (dateB, Amount22), (dateC, Amount23))) 在Scala中创建.csv文件的最快方法是什么: date*是枢轴 bucket*是列名 金额*填写表格 它需要看

我在Scala中有两个元组,其形式如下:

val array1 = (bucket1, Seq((dateA, Amount11), (dateB, Amount12), (dateC, Amount13))) 
val array2 = (bucket2, Seq((dateA, Amount21), (dateB, Amount22), (dateC, Amount23)))
在Scala中创建
.csv
文件的最快方法是什么:

  • date*
    是枢轴
  • bucket*
    是列名
  • 金额*
    填写表格
  • 它需要看起来像这样:

    日期:1号,2号

    日期-金额11-金额21

    日期buuuuuuuuuuuo


    dateC\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

    scala> val array1 = ("bucket1", Seq(("dateA", "Amount11"), ("dateB", "Amount12"), ("dateC", "Amount13"))) 
    array1: (String, Seq[(String, String)]) =
              (bucket1,List((dateA,Amount11), (dateB,Amount12), (dateC,Amount13)))
    
    scala> val array2 = ("bucket2", Seq(("dateA", "Amount21"), ("dateB", "Amount22"), ("dateC", "Amount23")))
    array2: (String, Seq[(String, String)]) = 
              (bucket2,List((dateA,Amount21), (dateB,Amount22), (dateC,Amount23)))
    
    // Single array to work with
    scala> val arrays = List(array1, array2)
    arrays: List[(String, Seq[(String, String)])] = List(
              (bucket1,List((dateA,Amount11), (dateB,Amount12), (dateC,Amount13))),
              (bucket2,List((dateA,Amount21), (dateB,Amount22), (dateC,Amount23)))
            )
    

    // Split between buckets and the values
    scala> val (buckets, values) = arrays.unzip
    buckets: List[String] = List(bucket1, bucket2)
    values: List[Seq[(String, String)]] = List(
              List((dateA,Amount11), (dateB,Amount12), (dateC,Amount13)),
              List((dateA,Amount21), (dateB,Amount22), (dateC,Amount23))
            )
    
    // Format the data
    // Note that this does not keep the 'dateX' order
    scala> val grouped = values.flatten
                               .groupBy(_._1)
                               .map { case (date, list) => date::(list.map(_._2)) }
    grouped: scala.collection.immutable.Iterable[List[String]] = List(
              List(dateC, Amount13, Amount23), 
              List(dateB, Amount12, Amount22),
              List(dateA, Amount11, Amount21)
            )
    
    // Join everything, and add the "Dates" column in front of the buckets
    scala> val table = ("Dates"::buckets)::grouped.toList
    table: List[List[String]] = List(
              List(Dates, bucket1, bucket2),
              List(dateC, Amount13, Amount23),
              List(dateB, Amount12, Amount22),
              List(dateA, Amount11, Amount21)
            )
    
    // Join the rows by ',' and the lines by "\n"
    scala> val string = table.map(_.mkString(",")).mkString("\n")
    string: String =
    Dates,bucket1,bucket2
    dateC,Amount13,Amount23
    dateB,Amount12,Amount22
    dateA,Amount11,Amount21