1、设置配置
spark.sql("set hive.exec.dynamic.partition=true")
spark.sql("set hive.exec.dynamic.partition.mode=nonstrict")
spark.sql("SET spark.sql.shuffle.partitions=1") //优化,防止生成很多的小文件
2、进行insert into 将tmp里的很多小文件进行合并,合并到test中
def mergeTest(spark: SparkSession, isCluster: Int): Unit = {
val endDay = 20200427
val endHour = 9
val sql = s"insert into test partition(end_day=$endDay,end_time_hour=$endHour) " +
s"select start_time, end_time,src_ip,src_port,dst_ip,dst_port " +
s"from test_tmp where end_day=$endDay and end_time_hour=$endHour " +
s" group by start_time, end_time,src_ip,src_port,dst_ip,dst_port"
spark.sql(sql)
println("mergeTest: " + sql)
}
由于数据量本身不是特别大,所以直接采用了group by(在spark中属于宽依赖)的方式。 这里必须要加入group by。 否则算是窄依赖, 设置了合并参数也是无效的。