大数据(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高级用法 隐式转换和隐式参数