sme*_*eeb 7 distributed-computing lazy-evaluation apache-spark rdd spark-dataframe
根据Spark RDD文档:
Spark中的所有转换都是懒惰的,因为它们不会立即计算结果......这种设计使Spark能够更有效地运行.
有些时候我需要做一些操作,我dataframes倍右当时和现在.但是因为数据帧操作被" 懒惰地评估 "(如上所述),当我在代码中编写这些操作时,很少有人保证Spark会实际执行与其余代码内联的操作.例如:
val someDataFrame : DataFrame = getSomehow()
val someOtherDataFrame : DataFrame = getSomehowAlso()
// Do some stuff with 'someDataFrame' and 'someOtherDataFrame'
// Now we need to do a union RIGHT HERE AND NOW, because
// the next few lines of code require the union to have
// already taken place!
val unionDataFrame : DataFrame = someDataFrame.unionAll(someOtherDataFrame)
// Now do some stuff with 'unionDataFrame'...
Run Code Online (Sandbox Code Playgroud)
所以我的解决方法(到目前为止)已经运行.show()或.count()紧跟我的时间敏感数据帧操作,如下所示:
val someDataFrame : DataFrame = getSomehow()
val someOtherDataFrame : DataFrame = getSomehowAlso()
// Do some stuff with 'someDataFrame' and 'someOtherDataFrame'
val unionDataFrame : DataFrame = someDataFrame.unionAll(someOtherDataFrame)
unionDataFrame.count() // Forces the union to execute/compute
// Now do some stuff with 'unionDataFrame'...
Run Code Online (Sandbox Code Playgroud)
... 强制 Spark执行数据帧操作然后在那里,内联.
这对我来说非常hacky/kludgy.所以我要问:是否有一种更普遍接受和/或有效的方法来强制数据帧操作按需发生(而不是懒惰评估)?
不.
你必须调用一个动作来强制Spark做实际的工作.转换不会触发这种效果,这也是爱情火花的原因之一.
顺便说一句,我很确定火花非常清楚什么时候必须"在这里和现在"完成,所以你可能正在关注错误的观点.
你能否确认一下
count()并被show()视为"行动"
您可以在文档中看到Spark的一些操作功能,其中count()列出了这些功能.show()是不是,我之前没有使用它,但感觉它是一个动作 - 如何在不做实际工作的情况下显示结果?:)
你是否暗示Spark会自动接受,并做联盟(及时)?
是的!:)
spark会记住你调用的转换,当一个动作出现时,它会在正确的时间内完成它们!
事情要记住:因为这个政策,做一个只有当实际工作的行动出现,你不会看到你在你拥有了一个逻辑错误转换(S),直到动作发生!
| 归档时间: |
|
| 查看次数: |
8827 次 |
| 最近记录: |