日志文件数据格式:
这里我们发现每条信息都有“”冒号的包裹,不利于我们分析,所以我们要对其进行简单的清洗去除冒号
UDF函数是对数据进行一进一出的操作,所以自定义UDF函数来实现
代码:
object Test02 {
def main(args: Array[String]): Unit = {
// spark配置文件
val sparkConf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("test02")
// sparkSQL的运行环境
val spark: SparkSession = SparkSession.builder().config(sparkConf).getOrCreate()
// 使用sparkSQL读取log文件,可以将它当做text文件读取
val df: DataFrame = spark.read.text("datas/moodle.zhiyou100.access.log")
// 查看spark内核对文件数据的解析,这里只是看做一个string字符串
df.printSchema()
// 自定义UDF函数,UDF函数实现的是一对一数据操作,所以这里可以定义实现去除日志中的“
spark.udf.register("delet",(x:String) => x.replace("\"",""))
// 必须创建临时表才能使用sparkSQL
df.createOrReplaceTempView("log")
// 使用sparksql进行查询数据
val value: DataFrame = spark.sql("select delet(*) from log")
// 这里指定查看5条,并且允许显示全部(默认TRUE会将较长的数据不显示完全)
value.show(5,false)
// 将修改后的数据导出保存
value.write.text("out1")
spark.close()
}
}
结果:
这里保存的格式就是TXT格式了