将数据框的数据带回本地节点,以进行SPARK / SCALA中的进一步操作(计数 / SHOW)



我在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(),因为它允许不同级别的持久性。

希望这是您想要的。欢呼

相关内容

  • 没有找到相关文章