Spark SQL中Dataframe join操作含null值的列
当在Spark SQL中对两个Dataframe使用join时,当作为连接的字段的值含有null值。由于null表示的含义是未知,既不知道有没有,在SQL中null值与任何其他值的比较(即使是null)永远不会为真。故在进行连接操作时null == null不为True,所以结果中不会出现该条记录,即左侧表格的这条记录对应右侧的值均为null。示例如下:
      
      Carpe diem
当在Spark SQL中对两个Dataframe使用join时,当作为连接的字段的值含有null值。由于null表示的含义是未知,既不知道有没有,在SQL中null值与任何其他值的比较(即使是null)永远不会为真。故在进行连接操作时null == null不为True,所以结果中不会出现该条记录,即左侧表格的这条记录对应右侧的值均为null。示例如下:
Scala扩展类的方式和Java一样也是使用extends关键字。和Java一样,你在定义中给出子类需要而超类没有的字段和方法,或者重写超类的方法。和Java一样,你也可以将类声明为final,这样它就不能被扩展。你还可以将单个方法或字段申明为final,以确保他们不能被重写。       
注: final 代表子类不能重载这个值, val 没有这个含义,只是做了运行时不能改变值得约束。
Scala类最简单的形式看上去和Java或C++相似:
```
class Person {
  // val 修饰的属性,系统会自动生成get方法
  val id:String = “1234” // 必须初始化字段
  // var 修饰的属性,系统会自动生成get和set方法
  var name:String = “”
  // private var 修饰的属性,系统会自动生成private修饰的get和set方法
  // 相当于类的私有字段
  private var gender:Int = 0
  // private[this] 修饰的属性,系统不会生成get和set方法
  // 只有当前对象才能访问
  private[this] var age:Int = 0
}
要读取文件中的所有行,可以调用scala.io.Source对象的getLines方法: 

