注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

阿弥陀佛

街树飘影未见尘 潭月潜水了无声 般若观照心空静...

 
 
 

日志

 
 
关于我

一直从事气象预报、服务建模实践应用。 注重气象物理场、实况场、地理信息、本体知识库、分布式气象内容管理系统建立。 对Barnes客观分析, 小波,计算神经网络、信任传播、贝叶斯推理、专家系统、网络本体语言有一定体会。 一直使用Java、Delphi、Prolog、SQL编程。

网易考拉推荐

scala csv, groupBy,filter配合使用  

2015-03-26 15:31:32|  分类: Scala |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
package obs5min

import breeze.io.TextWriter.FileWriter
import scala.collection.SortedMap
import scala.io.Source
import java.io.{File, PrintWriter}
/**
* 5分钟观测资料产生为csv文件
* Created by 何险峰,北京 on 15-3-23.
*/
object Obs5rain {
type tsmap=Map[(String,String),Array[String]]
def main(args: Array[String]){
val fnm="/wk/20140701.csv"
val sta="54761"
val ymdhm_sta_lines=openCsv(fnm)
val staStr = filtBySta(sta,ymdhm_sta_lines)
println(staStr)
}

def filtBySta(sta : String,ymdhm_sta_lines:tsmap):String={
val v = ymdhm_sta_lines.filter(kv => kv._1._2==sta).map(kv => kv._2.mkString(","))
v.mkString("\n")
}
def filtByTime(ymdhm:String,ymdhm_sta_lines:tsmap):String={
val v = ymdhm_sta_lines.filter(kv => kv._1._1==ymdhm).map(kv => kv._2.mkString(","))
v.mkString("\n")
}
def openCsv(csvFnm:String):tsmap={
val file = Source.fromFile(csvFnm)
val ymdhm_sta_lines = file.getLines.toArray.groupBy{line =>
val words = line.split(",")
(words(0).trim,words(1).trim)
}
file.close
ymdhm_sta_lines
}
def mkCsvFile{
val obs5minuDir="/wk/radar/nfs1/shareData/Obs_L0/Surf5min"
val yyyymm="201407"
val range = 21 to 31
for (day <- range) {
val pref = csvDay(yyyymm,day)
val outFnm = "/wk/" + pref + ".csv"
val inFnms = lstFilePath(obs5minuDir, "txt", pref)
val fw = new FileWriter(new File(outFnm))
for (i <- (0 until inFnms.length).par) {
val path = inFnms(i)
println(path)
val str = obs2fmt(path)
fw.append(str)
}
fw.close
}
}
def csvDay(yyyymm:String,day : Int)={
if (day<10) yyyymm+"0"+day else yyyymm+day
}
def obs2fmt(fnm : String):String={
val nCol=88 //114
val fieldLen=11
val sq="=".padTo(fieldLen,"=").mkString("")
val nChars=nCol * fieldLen
val absent="999999"
val y=6
val file = Source.fromFile(fnm)
val lines = file.getLines
.map(line => line.replaceAll(" ","=").trim)
.map(f=> "="+f).map(f=> f.slice(0,nChars))
.map(f=> f.padTo(nChars,"=").mkString(""))
.map(line=>line.grouped(fieldLen).toArray.map(f=>f.replace(sq,absent).replace("=.","0.").replace("=","")))
.map(l => mkYMDHm(l(y),l(y+1),l(y+2),l(y+3),l(y+4))+","+l.mkString(",")).toArray
file.close
lines.mkString("\n")
}
def lstFilePath(root: String, ext: String,pref:String) = {
println(pref)
scala.reflect.io.Path(root)
.walkFilter(p => p.isDirectory || (p.path.endsWith(ext) && p.path.indexOf(pref) >=0) )
.map(p=> p.path).toIndexedSeq
}
def mkYMDHm(y:String,M:String,d:String,h:String,m:String)={
val MM=if(M.length<=1) "0"+M else M
val dd=if(d.length<=1) "0"+d else d
val hh=if(h.length<=1) "0"+h else h
val mm=if(m.length<=1) "0"+m else m
y+MM+dd+hh+mm
}
}
  评论这张
 
阅读(456)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017