sparkSql 直接执行外部 sql/hql文件 升级篇2 udf函数

package hx.com

import hx.com.UDF.{JudgeLicense, SqlDataSource, UDF, UuidUdf}
import hx.com.constant.PropConstants
import hx.com.util.PropertieUtil
import org.apache.hadoop.security.UserGroupInformation
import org.apache.log4j.Logger
import org.apache.spark.sql.SparkSession

import java.io.File
import java.util.Properties
import scala.io.{BufferedSource, Source}

/**
 * 此版本是最新版,并已经部署在集群上(/home/etl_admin/spark)
 * ods层数据清洗落地到dwd层
 * 有特定UDF自定义函数的代码:也可以跑通用sql
 */
object Ods2DwdFilterUDF {

  def main(args: Array[String]): Unit = {
    val timeBegin: Long = System.currentTimeMillis()
    val log: Logger = Logger.getRootLogger
    val filePath: String = args(0)


      //读取集群配置文件
      val prop: Properties = PropertieUtil.load("config.properties")

    //本地测试读文件
//    val prop: Properties = PropertieUtil.getProperties("/config.properties")
    //读hive 的Kerberos认证
    System.setProperty("java.security.krb5.conf", prop.getProperty(PropConstants.KRB5_CONF_PATH))
    System.setProperty("HADOOP_USER_NAME", prop.getProperty(PropConstants.HADOOP_USER_NAME))
    System.setProperty("user.name", prop.getProperty(PropConstants.USER_NAME))
    UserGroupInformation.loginUserFromKeytab(
      prop.getProperty(PropConstants.KEYTAB_NAME), prop.getProperty(PropConstants.KEYTAB_FILE_PATH)
    )

    System.out.println(UserGroupInformation.getLoginUser)


    val session: SparkSession = SparkSession.builder()//.master("local[2]").appName("SparkSeesionApp")
      .config("spark.hadoop.hive.exec.dynamic.partition", "true")//开启动态分区
      .config("spark.hadoop.hive.exec.dynamic.partition.mode", "nonstrict")//开启动态分区
      .enableHiveSupport() //支持hive
      .getOrCreate()
//    session.sparkContext.setLogLevel("WARN")
    import org.apache.spark.sql.functions.udf
    //必须指定泛型[[Integer,String]],integer为自定义udf函数的出参类型,String为入参类型
    //参一"judgeLicense"是udf在sql使用中的方法明,参二是udf类中的具体方法
    session.udf.register[Integer,String]("judgeLicense",JudgeLicense.judgeLicense)
    //增加 equals,rangeMap UDF函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值