|
@@ -1,5 +1,6 @@
|
|
|
package com.winhc.bigdata.spark.udf
|
|
|
|
|
|
+import com.winhc.bigdata.spark.utils.BaseUtil
|
|
|
import org.apache.commons.lang3.StringUtils
|
|
|
import org.apache.spark.broadcast.Broadcast
|
|
|
import org.apache.spark.sql.SparkSession
|
|
@@ -9,7 +10,7 @@ import scala.annotation.meta.getter
|
|
|
/**
|
|
|
* @Author: XuJiakai
|
|
|
* @Date: 2020/9/30 13:57
|
|
|
- * @Description:
|
|
|
+ * @Description:法院等级判断
|
|
|
*/
|
|
|
trait CourtRank {
|
|
|
@(transient@getter) protected val spark: SparkSession
|
|
@@ -34,14 +35,71 @@ trait CourtRank {
|
|
|
spark.sparkContext.broadcast(court_name_rank)
|
|
|
}
|
|
|
|
|
|
+ def areaCode(): Broadcast[Map[String, String]] = {
|
|
|
+ val areaCode2Name = spark.sparkContext.broadcast(spark.sql(
|
|
|
+ s"""
|
|
|
+ |select province,city,area_code
|
|
|
+ |from winhc_eci_dev.ods_area_code where ds = '20200604'
|
|
|
+ """.stripMargin).collect().flatMap(r => {
|
|
|
+ val code = r.getString(2)
|
|
|
+ Seq((r.getString(0), code), (r.getString(1), code))
|
|
|
+ }).toMap)
|
|
|
+ areaCode2Name
|
|
|
+ }
|
|
|
+
|
|
|
+ //判断法院等级
|
|
|
def registerCourtRank(): Unit = {
|
|
|
val court_map = courtRank()
|
|
|
+ val area_code = areaCode()
|
|
|
spark.udf.register("court_level", (name: String) => {
|
|
|
+ trans(name, court_map, area_code)
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ def trans(name: String, court_map: Broadcast[Map[String, String]], area_code: Broadcast[Map[String, String]]): String = {
|
|
|
+ var r = ""
|
|
|
+ try {
|
|
|
if (StringUtils.isNotBlank(name)) {
|
|
|
- court_map.value.getOrElse(name, "")
|
|
|
+ r = court_map.value.getOrElse(name, "")
|
|
|
+ if (StringUtils.isNotBlank(r)) {
|
|
|
+ return r
|
|
|
+ } else {
|
|
|
+ if (name.contains("中级")) return "中级法院"
|
|
|
+ if (name.contains("高级")) return "高级法院"
|
|
|
+ if (name.contains("最高")) return "最高法院"
|
|
|
+ //名称必须包含法院
|
|
|
+ if (name.contains("法院")) {
|
|
|
+ val (province, city, country) = BaseUtil.parseAddress(name)
|
|
|
+ //区县直接返回基层法院
|
|
|
+ if (StringUtils.isNotBlank(country)) {
|
|
|
+ return "基层法院"
|
|
|
+ }
|
|
|
+ //市判断等级
|
|
|
+ if (StringUtils.isNotBlank(city)) {
|
|
|
+ val r1 = area_code.value.getOrElse(city, "")
|
|
|
+ if (StringUtils.isNotBlank(r1)) {
|
|
|
+ return "中级法院"
|
|
|
+ } else {
|
|
|
+ return "基层法院"
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //省直接返回高级
|
|
|
+ if (StringUtils.isNotBlank(province)) {
|
|
|
+ return "高级法院"
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ r
|
|
|
} else {
|
|
|
""
|
|
|
}
|
|
|
- })
|
|
|
+ } catch {
|
|
|
+ case e: Exception => {
|
|
|
+ println(name)
|
|
|
+ println(e.getMessage)
|
|
|
+ r
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
}
|