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
方法: