我有(键,列表(值))的地图。我想根据不同的密钥将列表(值)写入不同的文件。 例如 (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
我是斯卡拉的新手。提前谢谢。