Spark的延迟执行再理解

本文通过实例探讨Spark的延迟执行特性。在Spark中,由于计算是延迟的,只有触发行动操作时才会执行任务。尽管某些代码看似可能出错,但由于延迟执行,实际上它们表现相同。然而,当涉及特定查询时,如多重`select`,Spark可能不会自动合并为一个任务,而是采用子查询方式,这与SQL解析实现有关。理解延迟执行是解决此类疑问的关键。
摘要由CSDN通过智能技术生成

首先,大家可以猜测下如下代码的执行结果,是否会报错?

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的生成语句,顿时有种豁免开朗的感觉,这应该没有问题。
以下是语句实际执行情况:

再回过头来看上面三种写法之间的差别&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值