//.coalesce(1) 输出文件的个数
//.mode(SaveMode.Overwrite) 每次覆盖原来的文件
//.partitionBy(“day”) 以天为分区
import org.apache.spark.sql.{SaveMode, SparkSession}
/**
* 使用Spark完成数据清洗操作
*/
object SparkStatCleanJob {
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder().appName("SparkStatCleanJob").master("local[2]").getOrCreate()
//加载文件
val accessRDD = spark.sparkContext.textFile("file:///D:/test/access.log")
//RDD 转 DF
val accessDF = spark.createDataFrame(accessRDD.map(x => AccessConvertUtil.parseLog(x)),AccessConvertUtil.struct)
// accessDF.printSchema()
// accessDF.show(false)
//清洗的数据存储到目标地址
//.coalesce(1) 输出文件的个数
//.mode(SaveMode.Overwrite) 每次覆盖原来的文件
accessDF.coalesce(1).write.format("parquet").mode(SaveMode.Overwrite).partitionBy("day").save("file:///D:/test/clean")
spark.close()
}
}