提取器
这知识感觉多数跟case class配合使用,但是在与case class配合使用时就算不知道后面的工作机制也没什么关系,会用就行。
其实有必要的话可以自己写提取器,而什么时候用提取器,怎么提高数据传输效率才是难点 :(
直接上代码,加上个人理解
package com.dt.scala.moguyun
/**
* 提取器
* unapply
* 看两点:
* 1 类有没有unapply方法
* 2 unapply方法里传的参数是不是右边的
* 即可调用
* Created by hlf on 2016/8/11.
*/
case class Person1(name: String, age: Int) {
val content = name
}
case class Person2(name: String, age: Int, salary: Int) {
}
/**
* 新建类,里面有apply和unapply方法
*/
class DTCoder(val name: String, val salary: Int)
object DTCoder {
def apply(name: String, salary: Int) = {
println(
"DTCoder apply methode invoked !!!")
new DTCoder(name, salary)
}
def unapply(information: DTCoder) = {
Some((information.name, information.salary))
}
}
object HelloExtractor {
def main(args: Array[String]): Unit = {
val person = Person1.apply(
"spark",
6)
val Person1(name1, age1) = person
println(
"person1" + name1 +
" : " + age1)
person
match {
case Person1(name, age) => println(
"wow " + name +
" : " + age)
}
val dtcoder = DTCoder(
"hadoop",
200)
println(dtcoder.name +
": " + dtcoder.salary)
val DTCoder(dtname1, dtsalary1) = dtcoder
println(
"dtname1 " + dtname1 +
" : " + dtsalary1)
}
}
结果
person1spark :
6
wow spark :
6
DTCoder apply methode invoked !!!
hadoop:
200
dtname1 hadoop :
200
以上内容来自[DT大数据梦工厂]首席专家Spark专家王家林老师的课程分享。感谢王老师的分享,更多精彩内容请扫描关注[DT大数据梦工厂]微信公众号DT_Spark
转载请注明原文地址: https://ju.6miu.com/read-1295772.html