将值写入不同的密钥scala的不同文本文件中

时间:2018-05-17 04:42:43

标签: scala

我有(键,列表(值))的地图。我想根据不同的密钥将列表(值)写入不同的文件。 例如 (1,表(A,B,C,d)) (2,列表(X,Y,Z)) 所以,我想将键1值写入file1.txt 和键2值到file2.txt

class ScalaClass(val ccFilePath: String) {

  val sf = new SimpleDateFormat("yyyy/MM/dd HH:mm")
  val formatter = new SimpleDateFormat("yyyy/MM/dd")
  def hello() {

    var counter = 1

    val inputFiles = new java.io.File("D:\\IntelliHub MDMS\\CC files\\xml file and Cdata\\cc\\File Import for triggering AU2.csv")
    val iBufferSource = Source.fromFile(inputFiles)
    val iData = iBufferSource.getLines().toArray
    var lpDate = ""
    val result = scala.io.Source.fromFile(ccFilePath)
      .getLines
      .filter(line => ((iData).contains(line.split(",")(1))))
      .map { lines =>
        {
          (formatter.format(sf.parse(lines.split(",")(2))), lines)
        }
      }
      .toList
      .groupBy(_._1).map(p => p._1 -> p._2.map(_._2)).toMap
      .foreach {
        case (key, value) =>

          // println (key + "-->" + value)
          val fileName = new File("D:\\IntelliHub MDMS\\CC files\\xml file and Cdata\\hkincoming\\NORMAL\\AD1\\AU2_dump" + counter + ".dat")
          var pw = new java.io.PrintWriter(fileName)
          try
            if (fileName.exists()) {
              counter + 1
              pw = new java.io.PrintWriter("D:\\IntelliHub MDMS\\CC files\\xml file and Cdata\\hkincoming\\NORMAL\\AD1\\AU2_dump" + counter + ".dat")
              pw.write(value.mkString("\n"))
            } else {
              pw.write(value.mkString("\n"))
            }
          finally pw.flush()
          pw.close()
      }
  }
}

这是我当前的代码,其中我读取两个文件,基于meterID过滤记录并使用groupBy创建地图(键,列表(值))。 键=日期 值=行。

使用上面的代码我只得到一个有最新记录的文件。 当我打印地图时,我看到我有大约20个键。所以我需要数据到20个不同的文本文件。

输入文件1格式

MO/5052497_A+CON_kWh,5052497,2018/03/17 00:00,8,2,AMI,0.0020,CON_kWh,-1
MO/5052497_A+CON_kWh,5052497,2018/03/17 00:30,8,2,AMI,0.0020,CON_kWh,-1
MO/5052497_A+CON_kWh,5052497,2018/03/17 01:00,8,2,AMI,0.0020,CON_kWh,-1

输入文件2只有MeterID,需要在文件1中匹配,并以日期为基础获得结果。

输入文件2格式

5053610,5053688,5053689

我是斯卡拉的新手。提前谢谢。

0 个答案:

没有答案