主要使用 SparkSql 对 Hive 分区表使用动态分区进行操作,根据规则对数据进行清洗等,除了刚导入数据时指定date范围清洗,后期按天进行清洗。
package com.sm.cleandata
import java.io.File
import java.util.Properties
import com.sm.conf.ConfigurationManager
import com.sm.constants.Constants
import com.sm.utils.DateUtils
import org.apache.log4j.{Level, Logger}
import org.apache.spark.sql.{Dataset, Row, SaveMode, SparkSession}
import org.apache.spark.storage.StorageLevel
import org.slf4j.LoggerFactory
/**
* 二.
* 数据清洗类
* 将ods层数据进行清洗,导入dwd 层,以及配置汇总表的生成
*
* create by LiuJinHe 2019/10/23
*/
object CleanOdsToDwd {
private val warehouseLocation = "hdfs://cdh-slave01:9870/user/hive/warehouse"
// private val warehouseLocation = new File("spark-warehouse").getAbsolutePath
private val logger = LoggerFactory.getLogger("CleanOdsToDwd")
private var prop: Properties = new Properties
private var yesterday: String = _
var startDate = ""
var endDate = ""
def main(args: Array[String]): Unit = {
Logger.getLogger("org.apache.hadoop").setLevel(Level.WARN)
Logger.getLogger("org.apache.spark").setLevel(Level.INFO)
Logger.getLogger("org.spark_project.jetty").setLevel(Level.WARN)
// 获取当天和前一天日期
yesterday = DateUtils.getYesterdayDate
if (args.length == 2) {
yesterday = args(0)
}
// startDate = "2019-01-01"
// endDate = "2019-10-22"
// 初始化spark
val spark = initSparkSession
logger.info("===============> 开始生成 conf_game_package_channel 配置汇总表 <===============")
makePackageConf(spark)
// 读取ODS 层数据,解析导入 DWD 层事件表
val start = System.currentTimeMillis()
logger.info(s"===================> 开始加载Hive ODS层数据进行清洗 <===================")