首先,大家可以猜测下如下代码的执行结果,是否会报错?
val df = Seq((0, "ben", "student"),(1, "jim", "teacher")).toDF("id", "name", "job")
val df2 = df.select("id", "name")
val df3 = df2.filter("job = 'teacher'") // 是否会报错?
df3.show
val df4 = df.select("id", "name").filter("job = 'teacher'") // 是否会报错?
df4.show
val df5 = df3.filter("job = 'teacher'").select("id", "name") // 是否会报错?
df5.show
比较直观的反应是df3
可能会报错,因为df2
中已经不包含job
列了,此时会报列不存在的错误。
但再看下df4
的生成语句,隐隐感觉应该是没有问题的。
再看下df5
的生成语句,顿时有种豁免开朗的感觉,这应该没有问题。
以下是语句实际执行情况:
再回过头来看上面三种写法之间的差别&#