我执行了两次动作,第二次只需要很少的时间来运行,所以我怀疑spark会自动缓存一些结果。但我找到了任何消息来源。
我正在使用Spark1.4。
doc = sc.textFile('...')
doc_wc = doc.flatMap(lambda x: re.split('\W', x))\
.filter(lambda x: x != '') \
.map(lambda word: (word, 1)) \
.reduceByKey(lambda x,y: x+y)
%%time
doc_wc.take(5) # first time
# CPU times: user 10.7 ms, sys: 425 µs, total: 11.1 ms
# Wall time: 4.39 s
%%time
doc_wc.take(5) # second time
# CPU times: user 6.13 ms, sys: 276 µs, total: 6.41 ms
# Wall time: 151 ms
答案 0 :(得分:6)
Spark也会在shuffle操作中自动保留一些中间数据(例如reduceByKey),即使没有用户调用persist也是如此。这样做是为了避免在shuffle期间节点发生故障时重新计算整个输入。我们仍然建议用户在生成的RDD上调用持久化,如果他们打算重复使用它。
底层文件系统也将缓存对磁盘的访问。