我开始在单台计算机上首先使用pyspark,并对cache()
在jupyter笔记本中,我首先开始我的会话
from pyspark.sql import SparkSession
from pyspark.sql.types import *
import pyspark.sql.functions as F
spark = SparkSession.builder.appName('Test').getOrCreate()
假设我只想计算表T1
中的行数。所以我做了以下
T1.createOrReplaceTempView("T1_sdf")
S1 = spark.sql("select count(*) as total from T1_sdf")
首先我发现通过执行这两个命令,似乎笔记本(或火花?)还没有做任何真正的计算,然后我做了
S1.show()
它开始真正计算T1
中的行数。稍后,我必须重复使用表T1
来执行其他操作
我总是听到有人提到cache
。首先,我不确定如何在此sql上下文中实际实现缓存。
除此之外,我想知道为什么缓存之后的代码会加速并且代码执行过程的哪个部分已经加速了?在我必须编写递归之前,我有过动态编程的经验。在那个地方,我非常清楚地理解为什么缓存产生很大的不同,因为在计算新东西时,我需要一些我之前已经计算过的中间步骤的值,然后我想存储那些中间步骤的值因此,当我必须使用这些值时,我可以直接从一个地方获取它们而不是重新计算它们。但是,在这个缓存T1
的上下文中,我不确定为什么缓存有助于加速?我想我不明白spark如何执行引擎盖下的python或sql代码