我在Scala中使用Spark 1.6。
我知道这是火花框架背后的一些想法。但是我无法通过阅读不同的教程来回答自己。(也许是错误的教程)。
我将两个数据范围加入了一个新的数据范围( ndf )。现在我知道,尚未进行,因为我首先说表演或计数。
,但是由于我想准确地做到这一点,所以我想以不同的方式检查NDF:
nDF.show
nDF.count
nDF.filter()
..等等,每次都需要很长时间,因为原始数据范围很大。我无法将数据带到这个新数据。因此,我可以像原始集合一样快速解决这些新动作吗?(首先,我认为它是"收集",但它仅返回一个数组,没有数据框)
这是一个经典的场景。当您加入2个数据范围时,Spark不会执行任何操作,因为它在调用结果框架的操作时会懒惰地评估。动作平均显示,计数,打印等
现在,当显示 ndf 时,spark每次都在评估所得数据框架,即每次调用show时一次,然后在调用计数等时,spark正在评估结果框架。这意味着在内部进行映射/减少每次对结果框架进行操作时。
Spark不会在内存中缓存所得的数据框
所以当你做
时val nDF = a.join(b).persist
,然后调用计数/显示,它将一次评估NDF并将结果数据框架存储在内存中。因此,随后的动作将更快。
但是,拳头评估可能会慢一点,您也需要使用更多的执行器内存。
如果可用的内存相对于数据集的大小很好,那么您可能正在寻找的是df.cache()
。如果数据集的大小太大,请考虑使用df.persist()
,因为它允许不同级别的持久性。
希望这是您想要的。欢呼