大数据(7n)Scala隐式转换

Posted 小基基o_O

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据(7n)Scala隐式转换相关的知识,希望对你有一定的参考价值。

隐式函数

import scala.language.implicitConversions

object Hello {
  def main(args: Array[String]): Unit = {
    val i: Int = 1.0
    print(i) // 打印结果:1
  }

  implicit def double2int(d: Double): Int = d.toInt
}

如上代码所示,关键词implicit使Double可以转成Int

隐式类

import scala.language.implicitConversions

object Hello {
  def main(args: Array[String]): Unit = {
    val a: A = new A("aa")
    a.methodA // 打印结果:Aaa
    a.methodB // 打印结果:BAaa
  }

  class A(s: String) {
    val data: String = "A" + s
    val methodA: Unit = println(data)
  }

  class B(s: String) {
    val data: String = "B" + s
    val methodB: Unit = println(data)
  }

  implicit def a2b(a: A): B = new B(a.data)
}
import scala.language.implicitConversions

object Hell0 {
  def main(args: Array[String]): Unit = {
    val a: A = new A("aa")
    a.methodA
    a.methodB
  }

  class A(s: String) {
    val data: String = "A" + s
    val methodA: Unit = println(data)
  }

  implicit class B(a: A) {
    val data: String = "B" + a.data
    val methodB: Unit = println(data)
  }
}

如上两个代码,第1种是隐式函数,第2种从第1种变过来,是隐式类

隐式参数

// 方法
def m(k: Int, b: Int)(implicit x: Int) = k * x + b

// 传参
val y1 = m(2, -2)(1)
println(y1)

// 隐式参数:自动传参
implicit val x: Int = 1
val y2 = m(2, -2)
print(y2)

写Spark时用到隐式转换

RDD、DataFrame、DataSet 3者互转

val c1: SparkConf = new SparkConf().setAppName("a1").setMaster("local[*]")
val spark: SparkSession = SparkSession.builder().config(c1).getOrCreate()
//隐式转换支持
import spark.implicits._

以上是关于大数据(7n)Scala隐式转换的主要内容,如果未能解决你的问题,请参考以下文章

2021年大数据常用语言Scala(三十八):scala高级用法 隐式转换和隐式参数

scala 2.8 中从 String 到 Int 的隐式转换

Scala隐式转换

Scala隐式转换

Scala基础高阶函数隐式转换AKKA编程

深入理解Scala的隐式转换系统