本人是做java的,但是因为scala对spark的友好,所以因为好奇并且为了学习,再写代码之前还是决定使用scala来做
先贴核心的样本率处理
/**
* 正样本率多参递归处理
* @param spark sparksession
* @param sqlAllDF 主表(每次处理的结果数据)
* @param tableName 目标表名
* @param col 参数长度-1(标识 控制跳出递归)
* @param plus 正负样本标识
* @param column 类别字段(多个)
* @return
*/
def fac(spark:SparkSession,sqlAllDF:DataFrame
,tableName:String,col:Int,plus:String,column:Seq[String]): DataFrame ={
import spark.sql
if (column.length != 0 && col >= 0){
val c = column(col)
val sqlDF = sql(s"SELECT $c cs, sum($plus)/count(1) result from $tableName GROUP BY $c")
val reDF = sqlAllDF.join(sqlDF, sqlAllDF(c) === sqlDF("cs"),"left")
val df = reDF.withColumn(column(col),reDF(