Scala 隐式转换

隐式转换的定义

当编译器第一次编译失败的时候,会在当前的环境中查找能让代码编译通过的方法,用于将类型进行转换,实现二次编译

隐式转换的作用

隐式转换可以在不需改任何代码的情况下,扩展某个类的功能。

隐式解析机制

1)说明
(1)首先会在当前代码作用域下查找隐式实体(隐式方法、隐式类、隐式对象)。(一般是这种情况)
(2)如果第一条规则查找隐式实体失败,会继续在隐式参数的类型的作用域里查找。类型的作用域是指与该类型相关联的全部伴生对象以及该类型所在包的包对象

什么时候用到隐式转换

当我知道这个类中一定存在对应的方法时,我可以采用隐式转换。

举例:我需要将RDD转换为DataFrame

  def etlBaseAdLog(ssc:SparkContext,sparkSession: SparkSession)={
    import sparkSession.implicits._
    ssc.textFile("/user/douglas/ods/baseadlog.log").filter(item =>{
      val obj: JSONObject = ParseJsonData.getJsonData(item)
      obj.isInstanceOf[JSONObject]
    }).mapPartitions(partition=>{
      partition.map(item=>{
        val jsonObject: JSONObject = ParseJsonData.getJsonData(item)
        val adid: Int = jsonObject.getIntValue("adid")
        val adname: String = jsonObject.getString("adname")
        val dn: String = jsonObject.getString("dn")
        (adid,adname,dn)
      })
    }).toDF().coalesce(1).write.mode(SaveMode.Overwrite).insertInto("dwd.dwd_base_ad")
  }

在转换为DF过程中报红,但是我知道sparkSession对象中一定存在对应的转换方法,那么使用隐式转换

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值