- 加载本地文件
val rddlog = spark.sparkContext.textFile("file:///E:/spark.immoc/Data/access.20161111.log")
2.map操作: 首先利用line分为每一行,再利用splits进行分割,列式存储,就可以找到每一个列的信息,后续进行编辑列名,操作列。
rddlog.map(line => {
val splits = line.split(" ")
val ip =splits(0)
val time = splits(3)+ " " +splits(4) // 两列的+法
val url = splits(11).replaceAll("\"","")
val traffic = splits(9)
//( Datautils.parse(time),ip, url , traffic)
Datautils.parse(time) + "\t" + url + "\t" + traffic + "\t" + ip // 利用Tab建操作
} ).saveAsTextFile("file:///E:/spark.immoc/Data/output/")
3.Datautils.parse(time)时间解析工具 。定义输入输出格式用FastDataformat而不是SimpleDataFormat。
//输入格式
val YYYYMMDDHHMM_TIME_FORMAT = FastDateFormat.getInstance("dd/MMM/yyyy:HH:mm:ss Z",Locale.ENGLISH)
//输出格式
val TARGET_FORMAT =FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss")
4.获取要改变的时间格式,定义一个方法
def getTime (time :String) = {
YYYYMMDDHHMM_TIME_FORMAT.parse(time.substring(time.indexOf("[") + 1 ,
time.lastIndexOf("]"))).getTime()
}
5.转换操作,传入原始时间格式,进行操作。
def parse (time : String) = {
val tt = getTime(time)
TARGET_FORMAT.format(new Date(tt))
}
6.总结问题与要记住的操作
1) spark.sparkContext.textFile
2)map(line => {
val splits = line.split(” “)
val x = splits(num)
})saveAsTextFile(“”)
3).replaceAll(“\”“,”“) //转换
4)subString //索引要取的内容
parse(time.substring(time.indexOf(“[“) + 1 ,
time.lastIndexOf(“]”))).getTime()
5)一个方法的返回类型,如果不是=号 打就是utils,不定义的类型,在传参的时候会出现错误。