|
@@ -0,0 +1,481 @@
|
|
|
+package com.winhc.bigdata.spark.jobs.chance
|
|
|
+
|
|
|
+import java.sql.Timestamp
|
|
|
+import java.util.NoSuchElementException
|
|
|
+
|
|
|
+import com.winhc.bigdata.spark.utils.BaseUtil._
|
|
|
+import com.winhc.bigdata.spark.config.EsConfig
|
|
|
+import com.winhc.bigdata.spark.udf.BaseFunc
|
|
|
+import com.winhc.bigdata.spark.utils.BaseUtil.atDaysAfter
|
|
|
+import com.winhc.bigdata.spark.utils.{EsRestUtils, LoggingUtils, SparkUtils}
|
|
|
+import org.apache.spark.internal.Logging
|
|
|
+import org.apache.spark.sql.types.{StructField, StructType}
|
|
|
+import org.apache.spark.sql.{Row, SparkSession}
|
|
|
+
|
|
|
+import scala.annotation.meta.getter
|
|
|
+import scala.collection.mutable
|
|
|
+
|
|
|
+/**
|
|
|
+ * @Author: XuJiakai
|
|
|
+ * @Date: 2020/7/13 16:32
|
|
|
+ * @Description:
|
|
|
+ */
|
|
|
+object Inc_eci_debtor_relation {
|
|
|
+
|
|
|
+ def parseMap(map: Map[String, AnyVal]): eci_debtor_relation = {
|
|
|
+ val id = map("id").asInstanceOf[String]
|
|
|
+ val yg_name = map("yg_name").asInstanceOf[String]
|
|
|
+ val bg_name = map("bg_name").asInstanceOf[String]
|
|
|
+ val yg_cid = map("yg_cid").asInstanceOf[String]
|
|
|
+ val bg_cid = map("bg_cid").asInstanceOf[String]
|
|
|
+ val yg_reg_status = map("yg_reg_status").asInstanceOf[String]
|
|
|
+ val yg_province_code = map("yg_province_code").asInstanceOf[String]
|
|
|
+ val yg_city_code = map("yg_city_code").asInstanceOf[String]
|
|
|
+ val yg_county_code = map("yg_county_code").asInstanceOf[String]
|
|
|
+ val yg_reg_location = map("yg_reg_location").asInstanceOf[String]
|
|
|
+ val yg_estiblish_time = map("yg_estiblish_time").asInstanceOf[String]
|
|
|
+ val yg_category_code = map("yg_category_code").asInstanceOf[String]
|
|
|
+ val yg_reg_capital = map("yg_reg_capital").asInstanceOf[String]
|
|
|
+ val yg_phones = map("yg_phones").asInstanceOf[String]
|
|
|
+ val yg_emails = map("yg_emails").asInstanceOf[String]
|
|
|
+ val bg_reg_status = map("bg_reg_status").asInstanceOf[String]
|
|
|
+ val bg_province_code = map("bg_province_code").asInstanceOf[String]
|
|
|
+ val bg_city_code = map("bg_city_code").asInstanceOf[String]
|
|
|
+ val bg_county_code = map("bg_county_code").asInstanceOf[String]
|
|
|
+ val bg_reg_location = map("bg_reg_location").asInstanceOf[String]
|
|
|
+ val bg_estiblish_time = map("bg_estiblish_time").asInstanceOf[String]
|
|
|
+ val bg_category_code = map("bg_category_code").asInstanceOf[String]
|
|
|
+ val bg_reg_capital = map("bg_reg_capital").asInstanceOf[String]
|
|
|
+ val bg_phones = map("bg_phones").asInstanceOf[String]
|
|
|
+ val bg_emails = map("bg_emails").asInstanceOf[String]
|
|
|
+ val deleted = map("deleted").asInstanceOf[Long]
|
|
|
+ val update_time = map("update_time").asInstanceOf[Timestamp]
|
|
|
+ val create_time = map("create_time").asInstanceOf[Timestamp]
|
|
|
+ val ds = map("ds").asInstanceOf[String]
|
|
|
+ val e = eci_debtor_relation(id
|
|
|
+ , yg_name
|
|
|
+ , bg_name
|
|
|
+ , yg_cid
|
|
|
+ , bg_cid
|
|
|
+ , yg_reg_status
|
|
|
+ , yg_province_code
|
|
|
+ , yg_city_code
|
|
|
+ , yg_county_code
|
|
|
+ , yg_reg_location
|
|
|
+ , yg_estiblish_time
|
|
|
+ , yg_category_code
|
|
|
+ , yg_reg_capital
|
|
|
+ , yg_phones
|
|
|
+ , yg_emails
|
|
|
+ , bg_reg_status
|
|
|
+ , bg_province_code
|
|
|
+ , bg_city_code
|
|
|
+ , bg_county_code
|
|
|
+ , bg_reg_location
|
|
|
+ , bg_estiblish_time
|
|
|
+ , bg_category_code
|
|
|
+ , bg_reg_capital
|
|
|
+ , bg_phones
|
|
|
+ , bg_emails
|
|
|
+ , deleted
|
|
|
+ , update_time
|
|
|
+ , create_time, ds)
|
|
|
+ e
|
|
|
+ }
|
|
|
+
|
|
|
+ case class eci_debtor_relation(id: String
|
|
|
+ , yg_name: String
|
|
|
+ , bg_name: String
|
|
|
+ , yg_cid: String
|
|
|
+ , bg_cid: String
|
|
|
+ , yg_reg_status: String
|
|
|
+ , yg_province_code: String
|
|
|
+ , yg_city_code: String
|
|
|
+ , yg_county_code: String
|
|
|
+ , yg_reg_location: String
|
|
|
+ , yg_estiblish_time: String
|
|
|
+ , yg_category_code: String
|
|
|
+ , yg_reg_capital: String
|
|
|
+ , yg_phones: String
|
|
|
+ , yg_emails: String
|
|
|
+ , bg_reg_status: String
|
|
|
+ , bg_province_code: String
|
|
|
+ , bg_city_code: String
|
|
|
+ , bg_county_code: String
|
|
|
+ , bg_reg_location: String
|
|
|
+ , bg_estiblish_time: String
|
|
|
+ , bg_category_code: String
|
|
|
+ , bg_reg_capital: String
|
|
|
+ , bg_phones: String
|
|
|
+ , bg_emails: String
|
|
|
+ , deleted: Long
|
|
|
+ , update_time: Timestamp
|
|
|
+ , create_time: Timestamp
|
|
|
+ , ds: String) extends Serializable {
|
|
|
+ private var id_val = id
|
|
|
+ private var yg_name_val = yg_name
|
|
|
+ private var bg_name_val = bg_name
|
|
|
+ private var yg_cid_val = yg_cid
|
|
|
+ private var bg_cid_val = bg_cid
|
|
|
+ private var yg_reg_status_val = yg_reg_status
|
|
|
+ private var yg_province_code_val = yg_province_code
|
|
|
+ private var yg_city_code_val = yg_city_code
|
|
|
+ private var yg_county_code_val = yg_county_code
|
|
|
+ private var yg_reg_location_val = yg_reg_location
|
|
|
+ private var yg_estiblish_time_val = yg_estiblish_time
|
|
|
+ private var yg_category_code_val = yg_category_code
|
|
|
+ private var yg_reg_capital_val = yg_reg_capital
|
|
|
+ private var yg_phones_val = yg_phones
|
|
|
+ private var yg_emails_val = yg_emails
|
|
|
+ private var bg_reg_status_val = bg_reg_status
|
|
|
+ private var bg_province_code_val = bg_province_code
|
|
|
+ private var bg_city_code_val = bg_city_code
|
|
|
+ private var bg_county_code_val = bg_county_code
|
|
|
+ private var bg_reg_location_val = bg_reg_location
|
|
|
+ private var bg_estiblish_time_val = bg_estiblish_time
|
|
|
+ private var bg_category_code_val = bg_category_code
|
|
|
+ private var bg_reg_capital_val = bg_reg_capital
|
|
|
+ private var bg_phones_val = bg_phones
|
|
|
+ private var bg_emails_val = bg_emails
|
|
|
+ private var deleted_val = deleted
|
|
|
+ private var update_time_val = update_time
|
|
|
+ private var create_time_val = create_time
|
|
|
+ private var ds_val = ds
|
|
|
+
|
|
|
+ def setCreateTime(createTime: Timestamp): Unit = {
|
|
|
+ create_time_val = createTime
|
|
|
+ }
|
|
|
+
|
|
|
+ def toRow(): Row = {
|
|
|
+ Row(
|
|
|
+ id_val
|
|
|
+ , yg_name_val
|
|
|
+ , bg_name_val
|
|
|
+ , yg_cid_val
|
|
|
+ , bg_cid_val
|
|
|
+ , yg_reg_status_val
|
|
|
+ , yg_province_code_val
|
|
|
+ , yg_city_code_val
|
|
|
+ , yg_county_code_val
|
|
|
+ , yg_reg_location_val
|
|
|
+ , yg_estiblish_time_val
|
|
|
+ , yg_category_code_val
|
|
|
+ , yg_reg_capital_val
|
|
|
+ , yg_phones_val
|
|
|
+ , yg_emails_val
|
|
|
+ , bg_reg_status_val
|
|
|
+ , bg_province_code_val
|
|
|
+ , bg_city_code_val
|
|
|
+ , bg_county_code_val
|
|
|
+ , bg_reg_location_val
|
|
|
+ , bg_estiblish_time_val
|
|
|
+ , bg_category_code_val
|
|
|
+ , bg_reg_capital_val
|
|
|
+ , bg_phones_val
|
|
|
+ , bg_emails_val
|
|
|
+ , deleted_val
|
|
|
+ , update_time_val
|
|
|
+ , create_time_val
|
|
|
+ )
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ val target_ads_creditor_info = "xjk_ads_creditor_info_test"
|
|
|
+ val target_ads_eci_debtor_relation = "xjk_ads_eci_debtor_relation_test"
|
|
|
+ val target_write_debtor_relation = "xjk_write_debtor_relation_test"
|
|
|
+
|
|
|
+ case class DebtorRelation(s: SparkSession, ds: String) extends LoggingUtils with BaseFunc with Logging {
|
|
|
+ @(transient@getter) val spark: SparkSession = s
|
|
|
+
|
|
|
+ def inc(): Unit = {
|
|
|
+ val yesterday_ds = atDaysAfter(-1, ds)
|
|
|
+ company_split()
|
|
|
+ val sql1 =
|
|
|
+ s"""
|
|
|
+ |SELECT id
|
|
|
+ | ,case_id
|
|
|
+ | ,case_no
|
|
|
+ | ,case_type
|
|
|
+ | ,case_reason
|
|
|
+ | ,case_stage
|
|
|
+ | ,case_amt
|
|
|
+ | ,ys_yg_xjk as ys_yg
|
|
|
+ | ,ys_bg_xjk as ys_bg
|
|
|
+ | ,judge_date
|
|
|
+ | ,zhixing_date
|
|
|
+ | ,zhixing_result
|
|
|
+ | ,curr_stage
|
|
|
+ | ,curr_date
|
|
|
+ | ,curr_result
|
|
|
+ | ,'' as ys_yg_cid
|
|
|
+ | ,'' as ys_bg_cid
|
|
|
+ | ,'' as yg_reg_status
|
|
|
+ | ,'' as yg_province_code
|
|
|
+ | ,'' as yg_city_code
|
|
|
+ | ,'' as yg_county_code
|
|
|
+ | ,'' as yg_reg_location
|
|
|
+ | ,'' as yg_estiblish_time
|
|
|
+ | ,'' as yg_category_code
|
|
|
+ | ,'' as yg_reg_capital
|
|
|
+ | ,'' as yg_phones
|
|
|
+ | ,'' as yg_emails
|
|
|
+ | ,'' as bg_reg_status
|
|
|
+ | ,'' as bg_province_code
|
|
|
+ | ,'' as bg_city_code
|
|
|
+ | ,'' as bg_county_code
|
|
|
+ | ,'' as bg_reg_location
|
|
|
+ | ,'' as bg_estiblish_time
|
|
|
+ | ,'' as bg_category_code
|
|
|
+ | ,'' as bg_reg_capital
|
|
|
+ | ,'' as bg_phones
|
|
|
+ | ,'' as bg_emails
|
|
|
+ | ,CASE (zhixing_result = 2 OR( zhixing_result IS NULL AND curr_result = '胜')) WHEN TRUE THEN 0 ELSE 1 END AS deleted
|
|
|
+ | ,1 as flag
|
|
|
+ |FROM winhc_eci_dev.inc_ods_creditor_info
|
|
|
+ |LATERAL VIEW explode(company_split(ys_bg)) a AS ys_bg_xjk
|
|
|
+ |LATERAL VIEW explode(company_split(ys_yg)) b AS ys_yg_xjk
|
|
|
+ |WHERE ds = $ds
|
|
|
+ |AND yg_type = '企业'
|
|
|
+ |AND bg_type = '企业'
|
|
|
+ |AND LENGTH(ys_yg_xjk) > 4
|
|
|
+ |AND LENGTH(ys_bg_xjk) > 4
|
|
|
+ |""".stripMargin
|
|
|
+
|
|
|
+ val df = sql(sql1)
|
|
|
+
|
|
|
+ //增量文书原被告打平、补全数据
|
|
|
+ val schema = StructType(df.schema.map(s => {
|
|
|
+ StructField(s.name, s.dataType, nullable = true)
|
|
|
+ }))
|
|
|
+ val inc_rdd = df
|
|
|
+ .rdd
|
|
|
+ .mapPartitions(rp => {
|
|
|
+ val restClient = EsRestUtils.getRestClient()
|
|
|
+
|
|
|
+ val rd = rp.map(r => {
|
|
|
+ try {
|
|
|
+ val id = r.getAs[Long]("id")
|
|
|
+ val case_id = r.getAs[Long]("case_id")
|
|
|
+ val case_no = r.getAs[String]("case_no")
|
|
|
+ val case_type = r.getAs[String]("case_type")
|
|
|
+ val case_reason = r.getAs[String]("case_reason")
|
|
|
+ val case_stage = r.getAs[String]("case_stage")
|
|
|
+ val case_amt = r.getAs[Double]("case_amt")
|
|
|
+ val ys_yg = r.getAs[String]("ys_yg")
|
|
|
+ val ys_bg = r.getAs[String]("ys_bg")
|
|
|
+ val judge_date = r.getAs[Timestamp]("judge_date")
|
|
|
+ val zhixing_date = r.getAs[String]("zhixing_date")
|
|
|
+ val zhixing_result = r.getAs[String]("zhixing_result")
|
|
|
+ val curr_stage = r.getAs[String]("curr_stage")
|
|
|
+ val curr_date = r.getAs[String]("curr_date")
|
|
|
+ val curr_result = r.getAs[String]("curr_result")
|
|
|
+
|
|
|
+ val yg_map = EsRestUtils.getCidByCompanyName(restClient, ys_yg)
|
|
|
+ val bg_map = EsRestUtils.getCidByCompanyName(restClient, ys_bg)
|
|
|
+
|
|
|
+ val ys_yg_cid = yg_map("cid")
|
|
|
+ val ys_bg_cid = bg_map("cid")
|
|
|
+
|
|
|
+ val yg_reg_status = yg_map("reg_status")
|
|
|
+ val yg_province_code = yg_map("province_code")
|
|
|
+ val yg_city_code = yg_map("city_code")
|
|
|
+ val yg_county_code = yg_map("county_code")
|
|
|
+ val yg_reg_location = yg_map("reg_location")
|
|
|
+ val yg_estiblish_time = yg_map("estiblish_time")
|
|
|
+ val yg_category_code = yg_map("category_code")
|
|
|
+ val yg_reg_capital = yg_map("reg_capital")
|
|
|
+ val yg_phones = yg_map("phones")
|
|
|
+ val yg_emails = yg_map("emails")
|
|
|
+ val bg_reg_status = bg_map("reg_status")
|
|
|
+ val bg_province_code = bg_map("province_code")
|
|
|
+ val bg_city_code = bg_map("city_code")
|
|
|
+ val bg_county_code = bg_map("county_code")
|
|
|
+ val bg_reg_location = bg_map("reg_location")
|
|
|
+ val bg_estiblish_time = bg_map("estiblish_time")
|
|
|
+ val bg_category_code = bg_map("category_code")
|
|
|
+ val bg_reg_capital = bg_map("reg_capital")
|
|
|
+ val bg_phones = bg_map("phones")
|
|
|
+ val bg_emails = bg_map("emails")
|
|
|
+
|
|
|
+ val deleted = r.getAs[Integer]("deleted")
|
|
|
+ val flag = r.getAs[Integer]("flag")
|
|
|
+ Row(id
|
|
|
+ , case_id
|
|
|
+ , case_no
|
|
|
+ , case_type
|
|
|
+ , case_reason
|
|
|
+ , case_stage
|
|
|
+ , case_amt
|
|
|
+ , ys_yg
|
|
|
+ , ys_bg
|
|
|
+ , judge_date
|
|
|
+ , zhixing_date
|
|
|
+ , zhixing_result
|
|
|
+ , curr_stage
|
|
|
+ , curr_date
|
|
|
+ , curr_result
|
|
|
+ , ys_yg_cid
|
|
|
+ , ys_bg_cid
|
|
|
+ , yg_reg_status
|
|
|
+ , yg_province_code
|
|
|
+ , yg_city_code
|
|
|
+ , yg_county_code
|
|
|
+ , yg_reg_location
|
|
|
+ , yg_estiblish_time
|
|
|
+ , yg_category_code
|
|
|
+ , yg_reg_capital
|
|
|
+ , yg_phones
|
|
|
+ , yg_emails
|
|
|
+ , bg_reg_status
|
|
|
+ , bg_province_code
|
|
|
+ , bg_city_code
|
|
|
+ , bg_county_code
|
|
|
+ , bg_reg_location
|
|
|
+ , bg_estiblish_time
|
|
|
+ , bg_category_code
|
|
|
+ , bg_reg_capital
|
|
|
+ , bg_phones
|
|
|
+ , bg_emails
|
|
|
+ , deleted
|
|
|
+ , flag)
|
|
|
+ } catch {
|
|
|
+ case e: NoSuchElementException => null
|
|
|
+ case e: Exception => logError(e.getMessage, e)
|
|
|
+ null
|
|
|
+ }
|
|
|
+ }).filter(_ != null)
|
|
|
+ rd
|
|
|
+ })
|
|
|
+ .filter(_ != null)
|
|
|
+
|
|
|
+ spark.createDataFrame(inc_rdd, schema)
|
|
|
+ .createOrReplaceTempView("inc_tmp_creditor_info")
|
|
|
+
|
|
|
+ val cols = getColumns("winhc_eci_dev.ads_creditor_info")
|
|
|
+
|
|
|
+ //全量覆盖写出文书债权关系表
|
|
|
+ sql(
|
|
|
+ s"""
|
|
|
+ |INSERT ${if (isWindows) "INTO" else "OVERWRITE"} TABLE winhc_eci_dev.$target_ads_creditor_info
|
|
|
+ |SELECT ${cols.map("tmp." + _).mkString(",")}
|
|
|
+ |FROM (
|
|
|
+ | SELECT *
|
|
|
+ | ,row_number() OVER (PARTITION BY a.id,a.ys_yg_cid,a.ys_bg_cid ORDER BY flag DESC) c
|
|
|
+ | FROM (
|
|
|
+ | SELECT ${cols.mkString(",")},0 as flag
|
|
|
+ | FROM winhc_eci_dev.ads_creditor_info
|
|
|
+ | UNION ALL
|
|
|
+ | SELECT ${cols.mkString(",")},flag
|
|
|
+ | FROM inc_tmp_creditor_info
|
|
|
+ | ) AS a
|
|
|
+ | ) AS tmp
|
|
|
+ |WHERE tmp.c = 1
|
|
|
+ |""".stripMargin)
|
|
|
+
|
|
|
+
|
|
|
+ //全量分区写出企业关系表
|
|
|
+ sql(
|
|
|
+ s"""
|
|
|
+ |INSERT ${if (isWindows) "INTO" else "OVERWRITE"} TABLE winhc_eci_dev.$target_ads_eci_debtor_relation PARTITION(ds='$ds')
|
|
|
+ |SELECT CONCAT_WS('_',ys_yg_cid,ys_bg_cid) AS id
|
|
|
+ | ,ys_yg AS yg_name
|
|
|
+ | ,ys_bg AS bg_name
|
|
|
+ | ,ys_yg_cid AS yg_cid
|
|
|
+ | ,ys_bg_cid AS bg_cid
|
|
|
+ | ,yg_reg_status
|
|
|
+ | ,yg_province_code
|
|
|
+ | ,yg_city_code
|
|
|
+ | ,yg_county_code
|
|
|
+ | ,yg_reg_location
|
|
|
+ | ,yg_estiblish_time
|
|
|
+ | ,yg_category_code
|
|
|
+ | ,yg_reg_capital
|
|
|
+ | ,yg_phones
|
|
|
+ | ,yg_emails
|
|
|
+ | ,bg_reg_status
|
|
|
+ | ,bg_province_code
|
|
|
+ | ,bg_city_code
|
|
|
+ | ,bg_county_code
|
|
|
+ | ,bg_reg_location
|
|
|
+ | ,bg_estiblish_time
|
|
|
+ | ,bg_category_code
|
|
|
+ | ,bg_reg_capital
|
|
|
+ | ,bg_phones
|
|
|
+ | ,bg_emails
|
|
|
+ | ,deleted
|
|
|
+ | ,now() AS update_time
|
|
|
+ | ,now() AS create_time
|
|
|
+ |FROM (
|
|
|
+ | SELECT *
|
|
|
+ | ,ROW_NUMBER() OVER(PARTITION BY ys_yg_cid,ys_bg_cid ORDER BY deleted) AS num
|
|
|
+ | FROM winhc_eci_dev.$target_ads_creditor_info
|
|
|
+ | ) AS t
|
|
|
+ |WHERE t.num = 1
|
|
|
+ |""".stripMargin)
|
|
|
+
|
|
|
+ val eci_cols = getColumns(s"winhc_eci_dev.$target_ads_eci_debtor_relation")
|
|
|
+
|
|
|
+ println(eci_cols)
|
|
|
+
|
|
|
+
|
|
|
+ val write_schema = StructType(sql(
|
|
|
+ s"""
|
|
|
+ |select * from winhc_eci_dev.$target_ads_eci_debtor_relation where 1==0 and ds = $ds
|
|
|
+ |""".stripMargin).schema.filter(!_.name.equals("ds")))
|
|
|
+
|
|
|
+ //写出差值
|
|
|
+ val write_rdd = sql(
|
|
|
+ s"""
|
|
|
+ |select *
|
|
|
+ |from winhc_eci_dev.$target_ads_eci_debtor_relation
|
|
|
+ |where ds=$ds or ds=${yesterday_ds}
|
|
|
+ |""".stripMargin)
|
|
|
+ .rdd
|
|
|
+ .map(r => {
|
|
|
+ val id = r.getAs[String]("id")
|
|
|
+ val map = eci_cols.map(f => (f, r.getAs(f))).toMap
|
|
|
+ val c = parseMap(map)
|
|
|
+ (id, c)
|
|
|
+ }).groupByKey()
|
|
|
+ .map(x => {
|
|
|
+ val id = x._1
|
|
|
+ val list = x._2
|
|
|
+ if (list.size == 1) {
|
|
|
+ list.head.toRow
|
|
|
+ } else {
|
|
|
+ if (list.size > 2) {
|
|
|
+ logger.warn("list.size >2 ,id:" + id)
|
|
|
+ }
|
|
|
+ val all_map = list.map(e => (e.ds, e)).toMap
|
|
|
+ val today = all_map(ds)
|
|
|
+ val yesterday = all_map(yesterday_ds)
|
|
|
+ if (today.deleted == yesterday.deleted) {
|
|
|
+ null
|
|
|
+ } else {
|
|
|
+ today.setCreateTime(yesterday.create_time)
|
|
|
+ today.toRow
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }).filter(_ != null)
|
|
|
+
|
|
|
+ val write_df = spark.createDataFrame(write_rdd, write_schema)
|
|
|
+
|
|
|
+ write_df.write.mode(if (isWindows) "append" else "overwrite").insertInto(s"winhc_eci_dev.$target_write_debtor_relation")
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ def main(args: Array[String]): Unit = {
|
|
|
+ val Array(ds) = args
|
|
|
+
|
|
|
+ val config = EsConfig.getEsConfigMap ++ mutable.Map(
|
|
|
+ "spark.hadoop.odps.project.name" -> "winhc_eci_dev",
|
|
|
+ "spark.hadoop.odps.spark.local.partition.amt" -> "10"
|
|
|
+ )
|
|
|
+ val spark = SparkUtils.InitEnv("eci_debtor_relation", config)
|
|
|
+ DebtorRelation(spark, ds).inc
|
|
|
+ spark.stop()
|
|
|
+ }
|
|
|
+
|
|
|
+}
|